Setting row names on a tibble is deprecated. Error: invalid 'row.names' length

Setting row names on a tibble is deprecated. Error: invalid 'row.names' length

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

Setting row names on a tibble is deprecated.Error in row.names<-.data.frame(*tmp*, value = list(Site = c("AwarukuLower", : invalid 'row.names' length

有人建议 tidyverse 和 tibbles 可能是问题所在。我卸载了 tibble & 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)

将站点信息存储为行名

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

Returns 报错信息如上:

Setting row names on a tibble is deprecated.Error in row.names<-.data.frame(*tmp*, value = list(Site = c("AwarukuLower", : invalid 'row.names' length

或者,我尝试 运行 没有前 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\")")

Returns 第二个错误:

Error in heatmap(as.numeric(logdf), col = cm.colors(256), scale = "column", : (list) object cannot be coerced to type 'double'

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

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   

您的错误消息包含 2 个部分

  1. Setting row names on a tibble is deprecated.

这意味着在 tibble 上设置行名称已被弃用。它现在仍然有效,但将来会被删除。看到这个 https://github.com/tidyverse/tibble/issues/123.

  1. Error in row.names<-.data.frame(*tmp*, value = list(Site = c("AwarukuLower", : invalid 'row.names' length

这是一个错误,表示您设置的 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\")")

它会给出下图作为输出

我收到了同样的错误消息,在我的情况下,我只是将我的文件从 .xlsx 更改为 .csv...这很好。

但在您的情况下,您正在创建数据框...所以它不起作用嘿嘿嘿

把它留在这里以备不时之需。 :)