Ошибка возврата тепловой карты: «x» должен быть числовой матрицей, а x - числовой матрицей - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать тепловую карту численности видов на шести участках. У меня есть матрица сайтов против видов, числовые данные о численности.

Однако, когда я запускаю свой код, R возвращает ошибку, что моя матрица не числовая. Кто-нибудь может понять это? Я в тупике.

Ссылка на экспортированный фрейм данных: log_mean_wide

Рабочая:

lrc <- rainbow(nrow(log_mean_wide), start = 0, end = .3)
lcc <- rainbow(ncol(log_mean_wide), start = 0, end = .3)


logmap <- heatmap(log_mean_wide, col = cm.colors(256), scale = "column", 
               RowSideColors = lrc, ColSideColors = lcc, margins = c(5, 10),
               xlab = "species", ylab = "Site", 
               main = "heatmap(<Auckland Council MCI data 1999, habitat:bank>, ..., scale = \"column\")")

сообщение об ошибке: Ошибка в тепловой карте (log_mean_wide, Rowv = NA, Colv = NA, col = cm.colors (256),: 'x' должно быть числовой матрицей

log_heatmap <- heatmap(log_mean_wide, Rowv=NA, Colv=NA, col = cm.colors(256), scale="column", margins=c(5,10)) #same error

is.numeric(log_mean_wide) #[1] FALSE
is.character(log_mean_wide) #[1] FALSE
is.factor(log_mean_wide) #[1] FALSE
is.logical(log_mean_wide) #[1] FALSE
is.integer(log_mean_wide) #[1] FALSE

?!?!

dims <- dim(log_mean_wide)
log_mean_matrix <- as.numeric(log_mean_wide) 
dim(log_mean_matrix) <- dims

Ошибка: (список) объект не может быть приведен к типу 'double'

str (log_mean_wide) показывает вид в числовом формате, сайт в виде символа - почему это тогда не работает?

storage.mode(log_mean_wide) <- "numeric" 

Ошибка в storage.mode (log_mean_wide) <- "numeric": (список) объект не может быть приведен к типу 'double' </p>

1 Ответ

0 голосов
/ 30 апреля 2018

Есть две проблемы:

  1. Первый столбец log_mean_wide$Site не числовой.
  2. heatmap принимает только matrix в качестве входных данных (не data.frame).

Чтобы решить эти проблемы, вы можете сделать следующее (учтите, что на тепловой карте много беспорядка):

# Store Site information as rownames
df <- log_mean_wide;
rownames(df) <- log_mean_wide[, 1];

# Remove non-numeric column
df <- df[, -1];

# Use as.matrix to convert data.frame to matrix
logmap <- heatmap(
    as.matrix(df),
    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

...