I am trying to make a heatmap of a sites vs. species abundances matrix. With thanks to Maurits Evers for some of this code, I am still not able to run it without the error message:
Setting row names on a tibble is deprecated.Error in
row.names<-.data.frame
(*tmp*
, value = list(Site = c("AwarukuLower", : invalid 'row.names' length
It was suggested tidyverse & tibbles may be the issue. I uninstalled packages tibble & tidyverse and installed the devtools readr package instead. I am still getting the same error message and can't figure out how to fix this. 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)
Store Site information as rownames
logdf <- log_mean_wide_sp;
base::row.names(logdf) <- log_mean_wide_sp[, 1];
Remove non-numeric column
logdf <- logdf[, -1];
Use as.matrix
to convert data.frame to matrix
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 the error message as mentioned above:
Setting row names on a tibble is deprecated.Error in
row.names<-.data.frame
(*tmp*
, value = list(Site = c("AwarukuLower", : invalid 'row.names' length
Alternatively, I tried to run the code without first 3 lines, and used as.numeric and as.matrix to convert data.frame to numeric matrix. This also did not work.
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 this second error:
Error in heatmap(as.numeric(logdf), col = cm.colors(256), scale = "column", : (list) object cannot be coerced to type 'double'
Your error messages has 2 parts
- Setting row names on a tibble is deprecated.
This means setting row names on tibble is deprecated. It still works as of now but will be removed in future. See this https://github.com/tidyverse/tibble/issues/123.
- Error in
row.names<-.data.frame
(*tmp*
, value = list(Site = c("AwarukuLower", : invalid 'row.names' length
This is error saying that the length of row.names that you are setting is not equal to total no of rows you have in your data frame.
The error is in reading your csv file, your csv file has first column as row name but you are reading it as normal column. Read it correctly by using
log_mean_wide_sp<-read.csv("log_mean_wide.csv",row.names = 1)
Then do the below steps as you are doing
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\")")
It will give below image as output