web-dev-qa-db-fra.com

Définir des noms de ligne sur un tibble est obsolète. Erreur: longueur 'row.names' non valide

J'essaie de créer une carte thermique d'une matrice d'abondance des sites et des espèces. Grâce à Maurits Evers pour une partie de ce code, je ne suis toujours pas en mesure de l'exécuter sans le message d'erreur:

La définition des noms de ligne sur un tibble est obsolète. Erreur dans row.names<-.data.frame (*tmp*, value = list (Site = c ("AwarukuLower", longueur de "row.names") non valide

Il a été suggéré tidyverse & tibbles peut être la question. J'ai désinstallé les paquets tibble & tidyverse et installé le paquet devtools readr. Je reçois toujours le même message d'erreur et je ne sais pas comment résoudre ce problème. Données attachées .

library(readr)
devtools::install_github("tidyverse/readr") #to install readr without tidyverse

bank_mean_wide_sp <- read.csv("/Users/Chloe/Desktop/Environmental Data Analysis/EDA.working.directory/bank_mean_wide.csv")
log_mean_wide_sp <- read_csv("/Users/Chloe/Desktop/Environmental Data Analysis/EDA.working.directory/log_mean_wide.csv")

as.matrix(bank_mean_wide_sp)
as.matrix(log_mean_wide_sp)

Stocker les informations du site en tant que noms de domaine

logdf <- log_mean_wide_sp;
base::row.names(logdf) <- log_mean_wide_sp[, 1];

Supprimer la colonne non numérique

logdf <- logdf[, -1];

Utilisez as.matrix pour convertir data.frame en matrice

logmap <- heatmap(
as.matrix(logdf),
col = cm.colors(256),
scale = "column",
margins = c(5, 10),
xlab = "species", ylab = "Site",
main = "heatmap(<Auckland Council MCI data 1999, habitat:bank>, ..., scale = \"column\")")

Renvoie le message d'erreur mentionné ci-dessus: 

La définition des noms de ligne sur un tibble est obsolète. Erreur dans row.names<-.data.frame (*tmp*, value = list (Site = c ("AwarukuLower", longueur de "row.names") non valide

Alternativement, j'ai essayé d'exécuter le code sans les trois premières lignes, et utilisé as.numeric et as.matrix pour convertir data.frame en matrice numérique. Cela aussi n'a pas fonctionné.

as.matrix(logdf) 
logmap <- heatmap(as.numeric(logdf),
col = cm.colors(256),
scale = "column",
margins = c(5, 10),
xlab = "species", ylab = "Site",
main = "heatmap(<Auckland Council MCI data 1999, habitat:bank>, ..., scale = \"column\")")

Renvoie cette seconde erreur:

Une erreur dans l'objet heatmap (as.numeric (logdf), col = cm.colors (256), scale = "Column",: (liste) ne peut pas être forcée à taper "double"

3
chloep

Votre message d'erreur a 2 parties

  1. Définir des noms de ligne sur un tibble est obsolète.

Cela signifie que la définition de noms de lignes sur tibble est obsolète. Il fonctionne toujours à partir de maintenant mais sera supprimé à l'avenir. Voir ceci https://github.com/tidyverse/tibble/issues/123 .

  1. Erreur dans row.names<-.data.frame (*tmp*, valeur = list (Site = c ("AwarukuLower"), "longueur de 'row.names' non valide

C'est une erreur indiquant que la longueur de row.names que vous définissez n'est pas égale au nombre total de lignes que vous avez dans votre cadre de données.

L'erreur est dans la lecture de votre fichier csv, votre fichier csv a la première colonne comme nom de ligne mais vous le lisez comme une colonne normale. Lisez-le correctement en utilisant

log_mean_wide_sp<-read.csv("log_mean_wide.csv",row.names = 1)

Puis faites les étapes ci-dessous comme vous le faites

logdf<-log_mean_wide_sp
logmap <- heatmap(
as.matrix(logdf),
col = cm.colors(256),
scale = "column",
margins = c(5, 10),
xlab = "species", ylab = "Site",
main = "heatmap(<Auckland Council MCI data 1999, habitat:bank>, ..., scale = \"column\")")

Cela donnera l'image ci-dessous en sortie

 enter image description here

1
Dhawal Kapil

Je recommanderais de créer une version matricielle de la partie numérique de votre cadre de données:

log_mean_mat <- as.matrix(log_mean_wide_sp[,-1])

Vous ne devriez pas avoir de problèmes pour définir les noms de lignes pour ceci:

row.names(log_mean_mat) <- log_mean_wide_sp[,1]

Personnellement, je préfère fortement la fonction heatmap.2 pour les heatmaps (dans le paquet gplots) à la fonction de base, mais voici ce qui devrait fonctionner avec le code de base:

heatmap(log_mean_mat,
  col = cm.colors(256),
  scale = "column",
  margins = c(5, 10),
  xlab = "species", ylab = "Site",
  main = "heatmap(<Auckland Council MCI data 1999, habitat:bank>, ..., scale = \"column\")")

Site         Acarina Acroperla Amphipoda Austroclima Austrolestes Ceratopogonidae 
AwarukuLower    0   0   1   0   0   0   
AwarukuMid      1   20  6   0   0   0   
NukumeaLower    0   44  1   0   0   1   
NukumeaUpper    1   139 9   2   1   0   
VaughanLower    1   110 112 1   0   0   
VaughanMid      2   44  12  2   1   0   
0
Melissa Key