cca или длина графика 'dimnames' [1] не равна экстенту массива - PullRequest
0 голосов
/ 05 мая 2020

Я рисую около данных видов (556 видов) и параметры окружающей среды (eiv), но у меня есть проблемы с добавлением названий видов в качестве меток на графике. Названия видов находятся в строке заголовка фрейма данных spe c.

Данные о видах включают 369 видов трав, 135 видов мхов и 52 вида лишайников, которые я попытался выделить на графике по-разному:

cca1<- vegan::cca(log1p(spec), log1p(eiv))

col<-c(rep("grey", 369), rep("red", 135),rep("green",52))
shp<- c(rep(1, 369), rep(15, 135),rep(17,52))
cex<- c(rep(0.5, 369), rep(0.7, 135),rep(0.7,52))
lgd<- c(rep("Herbs", 369), rep("Mosses",135), rep("Lichen",52))
spnames<-colnames(spec[,1:556])

ordiplot (cca1, display = 'sp', type = 'n', main ="CCA Alpine Species using EIV" )
points(cca1, display = "species", cex = cex, pch = shp,  col = col, scaling=3)
text(cca1, display = "species",labels=spnames,scaling=3)
text(cca1, display = "bp", col = "grey40", cex = 0.8, scaling=3)
legend(x="topright", legend=unique(lgd), col = unique(col), pch = unique(shp))

когда я запускаю команду 'text (cca1, display = "sizes", labels = spnames, scaling = 3), я получаю эту ошибку:

Ошибка в dimnames (x) <- dn : length of 'dimnames' [1] не равно экстенту массива </p>

Может ли это иметь какое-то отношение к 3 различным группам видов, хотя вместе они составляют 556 видов?

1 Ответ

0 голосов
/ 11 мая 2020

Я думаю, проблема в том, что названия видов должны быть названиями столбцов (названиями векторов), а не названиями строк. Но приведенного вами примера недостаточно для того, чтобы по-настоящему разобраться в этом. Не могли бы вы в следующий раз привести небольшой воспроизводимый пример проблемы. Это также упрощает предоставление помощи и ответ на ваш вопрос. Если я быстро попытаюсь понять, в чем проблема, у меня не возникнет проблемы, когда я нанесу на график результаты CCA, см. Пример ниже.

spec <- as.data.frame(matrix(ncol = 1, nrow = 100))
for(i in 1:556){
  spec[,paste("sp",i)] <- rbinom(100,1,0.5)
}
#This is awkward, ignore this bad coding part
spec <- spec[-1]

eiv <- as.data.frame(matrix(ncol = 1, nrow = 100))
for(i in 1:10){
  eiv[,paste("var", i)] <- rnorm(100)
}
#again very akward
eiv <- eiv[-1]

cca1 <- vegan::cca(spec, eiv)

col<-c(rep("grey", 369), rep("red", 135),rep("green",52))
shp<- c(rep(1, 369), rep(15, 135),rep(17,52))
cex<- c(rep(0.5, 369), rep(0.7, 135),rep(0.7,52))
lgd<- c(rep("Herbs", 369), rep("Mosses",135), rep("Lichen",52))
spnames<-colnames(spec[,1:556])

ordiplot (cca1, display = 'sp', type = 'n', main ="CCA Alpine Species using EIV" )
points(cca1, display = "species", cex = cex, pch = shp,  col = col, scaling=3)
text(cca1, display = "species",labels=spnames,scaling=3)
text(cca1, display = "bp", col = "grey40", cex = 0.8, scaling=3)
legend(x="topright", legend=unique(lgd), col = unique(col), pch = unique(shp))

Кроме того, отображение названий 556 видов на графике не сработает, как вы можете видеть в результатах. Это можно было бы уменьшить с помощью чего-то вроде функции orditorp (https://fromthebottomoftheheap.net/2013/01/13/decluttering-ordination-plots-in-vegan-part-2-orditorp/), но я не знаком с ней. Или удалите некоторые виды, которые встречаются не очень часто. Я думаю, это необходимо, поскольку они так или иначе влияют на «объясненный вариант» вашего ОСО. Вы также можете обратиться к численным результатам CCA, посмотрев на оценки видов. . Кроме того, повторное выполнение CCA для этих видов может дать более красивый график, но, конечно, очень предвзято, так как вы удаляете большую часть видов и создаете новую CCA на крайних участках. Я предлагаю сначала взглянуть на вопрос, на который вы хотите ответить.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...