ФОН:Ошибка: Аргумент длины 0 возвращается в R
Сейчас я работаю с функциональным индексом разнообразия ВКИ кто есть R скрипт предоставляется по адресу: http://www.irstea.fr/la-recherche/unites-de-recherche/hyax/ecology-schleuter-2010
У меня было несколько проблем с этим сценарием которые я думаю, что я нашел решения, но я новичок в R и не могу исправить эту последнюю.
Это предполагает использование трех data.frames числа каждого вида животных на каждом типе среды обитания, а также максимального и минимального значений признака для каждого вида, таких как:
Abundance1
Location S1 S2 S3 S4 S5 S6 S7 S8 S9
Palm 6 3 0 1 0 16 0 2 3
Forest 2 0 2 1 2 1 3 0 2
max1
Species max
S1 44.7344
S2 22.6966
S3 75.1817
S4 17.8176
S5 50.7472
S6 33.3660
S7 14.3341
S8 3.3947
S9 10.2510
min1
Species min
S1 25.3038
S2 19.5750
S3 60.5880
S4 16.2864
S5 46.1040
S6 10.9056
S7 8.7570
S8 2.1289
S9 4.1730
ЧТО Я СДЕЛАЛ:
Сценарий первоначально начинается с того, что, по моему мнению, извлекает данные о минимальном, максимальном и изобилии и упорядочивает их по видам.
Abundance1 <- read.table("Put here your path/Sites.txt",h=T)
rownames(Abundance1) <- Abundance1[,1]
Abundance <- Abundance1[,-1]
Abundance <- Abundance[,order(colnames(Abundance))]
min1 <- read.table("Put here your path/min_traits.txt",h=T)
max1 <- read.table("Put here your path/max_traits.txt",h=T)
rownames(min1) <- min1[,1]
minsp <- min1[,-1]
minsp <- minsp[order(rownames(minsp)),]
rownames(max1) <- max1[,1]
maxsp <- max1[,-1]
maxsp <- maxsp[order(rownames(maxsp)),]
Первоначально конечная линия maxsp посылает обратно сообщение об ошибке сказав, что аргумент (rownames (maxsp)) не вектор, как это было в последней строке minsp. Я понял, что это могло быть потому, что rownames() на самом деле является функцией, поэтому я изменил эту часть кода на rownamesM для max и rownamesm для минимума.
После этого он отправил обратно ошибки, указав, что maxsp [order (rownamesM,] имеет неправильное количество измерений и снова то же самое для minsp. Я думал, это могло быть потому, что функция extract уменьшала размеры вниз, поэтому я добавлено капля = FALSE для каждого из извлечений, которые оставили меня с этим кодом, который, кажется, работает:
rownamesA <- Abundance1[,1, drop=FALSE]
Abundance <- Abundance1[,-1, drop=FALSE]
Abundance <- Abundance[order(colnames(Abundance))]
rownamesm <- min1[,1, drop=FALSE]
minsp <- min1[,-1, drop= FALSE]
minsp <- minsp[order(rownamesm),]
rownamesM <- max1[,1, drop=FALSE]
maxsp <- max1[,-1, drop=FALSE]
maxsp <- maxsp[order(rownamesM),]
Однако я явно испортил что-то, как, когда я запускаю следующую часть скрипта я получаю сообщение об ошибке: Ошибка в 1: ncol (minsp): аргумент length 0
Перевод: zCarot Следующая часть скрипта:
globalFRI <- function(minsp,maxsp) {
deltaS <- list()
for (j in 1:ncol(minsp))
{
xx <- cbind(minsp[,j], maxsp[,j])
xx <- xx[apply(xx,1,function(z) sum(is.finite(z))==2),]
xx <- xx[order(xx[,1]),]
z <- c(0, nrow(xx))
i <- 1
b <- xx[1, 2]
while (i < nrow(xx))
{
if (b < xx[i+1,1]) z <- c(z, i)
b <- ifelse(b >= xx[i+1,2], b, xx[i+1,2])
i <- i+1
if (i==nrow(xx)) break
}
group <- factor(rep(1:(length(z)-1), diff(sort(z))))
deltaS[[j]] <- tapply(xx[,2], group, max) - tapply(xx[,1], group, min)
}
globalFRIs <- sapply(deltaS, sum)}
globalFRIAll <- globalFRI(minsp,maxsp)
Я нахожусь в полной потере и не знаю, что делать дальше. Может ли кто-нибудь, пожалуйста, дать мне несколько указаний относительно того, где я ошибся?
Заранее спасибо
Вы должны приобрести базовые навыки отладки. Ваш первый шаг должен был смотреть на 'ncol (minsp)' после возникновения ошибки. Ваш второй шаг, глядя на 'minsp'. – Roland