我正在尝试制作网站与物种丰度矩阵的热图。感谢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;
答案 0 :(得分:2)
您的错误消息有两部分
- 不推荐在tibble上设置行名称。
醇>
这意味着不建议在tibble上设置行名。它现在仍然有效,但将来会被删除。请参阅此https://github.com/tidyverse/tibble/issues/123。
- 醇>
row.names<-.data.frame
中的错误(*tmp*
,值=列表(网站= c(“AwarukuLower”,:无效'row.names'长度
这是错误,表示您设置的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\")")
它将在下面的图像作为输出
答案 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