Задавать имена строк в тиббле не рекомендуется. Ошибка: недопустимая длина row.names

Я пытаюсь составить тепловую карту матрицы участков и обилия видов. Благодаря Маурицу Эверсу за часть этого кода я все еще не могу запустить его без сообщения об ошибке:

Установка имен строк в таблице не рекомендуется. Ошибка в _1 _ (_ 2_, value = list (Site = c ("AwarukuLower",: недопустимая длина 'row.names'

Было высказано предположение, что проблема в tidyverse и tibbles. Я удалил пакеты tibble и tidyverse и вместо этого установил пакет devtools readr. Я все еще получаю то же сообщение об ошибке и не могу понять, как это исправить. Данные прикреплены.

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

Возвращает сообщение об ошибке, как упомянуто выше:

Установка имен строк в таблице устарела. Ошибка в _8 _ (_ 9_, value = list (Site = c ("AwarukuLower",: недопустимая длина 'row.names'

В качестве альтернативы я попытался запустить код без первых трех строк и использовал 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 = "column",: (list) объект не может быть приведен к типу 'double')


person chloep    schedule 04.05.2018    source источник
comment
Я в замешательстве - какие ошибки вы исправили и о каких спрашиваете? Кажется, у вас есть шаг as.matrix в начале, прежде чем вы возьмете один столбец в качестве имен строк. Пожалуйста, поясните, какой у вас код (в порядке) и о чем вы спрашиваете.   -  person Melissa Key    schedule 04.05.2018
comment
Привет @MelissaKey, я отредактировал для ясности. В коде показаны мои попытки создания тепловой карты, ошибок не было, и код не работал. Он находится в точном порядке, скопированном из документа .rmd.   -  person chloep    schedule 04.05.2018
comment
Также - только что заметил, что код заголовка (main =) не соответствует отображаемому набору данных. Это не проблема, но для объяснения я создам две отдельные тепловые карты численности видов на 6 участках для двух разных типов среды обитания (как указано в отдельных листах .csv по ссылке).   -  person chloep    schedule 04.05.2018
comment
Я стараюсь не загружать данные - если есть что-то, что я могу легко скопировать / вставить, я использую это для тестирования. Решение, которое я дал, должно работать в теории, но еще не опробовано. Если у вас есть ошибка с решением, которое я дал, оставьте комментарий, и я, вероятно, смогу это выяснить.   -  person Melissa Key    schedule 04.05.2018


Ответы (2)


Ваше сообщение об ошибке состоит из двух частей.

  1. Задавать имена строк в тиббле не рекомендуется.

Это означает, что установка имен строк в тиббле устарела. Он по-прежнему работает, но будет удален в будущем. См. Этот https://github.com/tidyverse/tibble/issues/123.

  1. Ошибка в _1 _ (_ 2_, value = list (Site = 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\")")

Это даст изображение ниже в качестве вывода

введите здесь описание изображения

person Dhawal Kapil    schedule 04.05.2018

Я бы рекомендовал создать матричную версию числовой части вашего фрейма данных:

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   
person Melissa Key    schedule 04.05.2018
comment
Для этого выполняются первый и последний фрагменты, однако код имен строк возвращает: Ошибка в dimnames (x) ‹- dn: длина dimnames [1] не равна размеру массива. Grr. Добавлен уменьшенный фрейм данных к вашему ответу для копирования / вставки. - person chloep; 04.05.2018
comment
В опубликованном вами образце я не получаю эту ошибку. Вы можете проверить dim(log-mean_wide_sp) и dim(log_mean_mat). Первое число должно быть одинаковым на обоих. - person Melissa Key; 04.05.2018
comment
> dim(log_mean_wide_sp) [1] 6 54 > dim(log_mean_mat) [1] 6 53 Следует отметить, что образец, который я вам отправил, не имеет аналогов. site / sp .. Фактическая матрица насчитывает около 100sp. - person chloep; 04.05.2018