不推荐在tibble上设置行名。错误:无效' row.names'长度

时间:2018-05-04 03:16:34

标签: r heatmap tidyverse tibble readr

我正在尝试制作网站与物种丰度矩阵的热图。感谢Maurits Evers提供的一些代码,如果没有错误消息,我仍然无法运行它:

  

不推荐在tibble上设置行名   row.names<-.data.frame*tmp*,value = list(Site =   c(&#34; AwarukuLower&#34;,:无效&#39; row.names&#39;篇

有人建议tidyverse&amp;可能是问题。我卸载了包tibble&amp; tidyverse并安装了devtools readr软件包。我仍然收到相同的错误消息,无法弄清楚如何解决此问题。 Data attached

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)

将网站信息存储为rownames

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

删除非数字列

logdf <- logdf[, -1];

使用as.matrix将data.frame转换为矩阵

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\")")

返回如上所述的错误消息:

  

不推荐在tibble上设置行名   row.names<-.data.frame*tmp*,value = list(Site =   c(&#34; AwarukuLower&#34;,:无效&#39; row.names&#39;篇

或者,我尝试在没有前3行的情况下运行代码,并使用as.numeric和as.matrix将data.frame转换为数字矩阵。这也行不通。

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\")")

返回第二个错误:

  

热图中的错误(as.numeric(logdf),col = cm.colors(256),scale =   &#34;列&#34;,:(列表)对象无法强制键入&#39; double&#39;

2 个答案:

答案 0 :(得分:2)

您的错误消息有两部分

  
      
  1. 不推荐在tibble上设置行名称。
  2.   

这意味着不建议在tibble上设置行名。它现在仍然有效,但将来会被删除。请参阅此https://github.com/tidyverse/tibble/issues/123

  
      
  1. row.names<-.data.frame中的错误(*tmp*,值=列表(网站= c(“AwarukuLower”,:无效'row.names'长度
  2.   

这是错误,表示您设置的row.names的长度不等于数据框中的行总数。

错误在于读取您的csv文件,您的csv文件的第一列是行名,但您正在将其作为普通列读取。使用

正确读取
log_mean_wide_sp<-read.csv("log_mean_wide.csv",row.names = 1)

然后执行以下步骤

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\")")

它将在下面的图像作为输出

enter image description here

答案 1 :(得分:0)

我建议您创建数据框数字部分的矩阵版本:

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

为此设置行名称时不应该出现问题:

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

我个人非常喜欢heatmap.2函数的热图(在gplots包中)而不是基函数,但是这里应该使用基本代码:

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