2015-07-02 5 views
0

ФОН:Ошибка: Аргумент длины 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) 

Я нахожусь в полной потере и не знаю, что делать дальше. Может ли кто-нибудь, пожалуйста, дать мне несколько указаний относительно того, где я ошибся?

Заранее спасибо

+0

Вы должны приобрести базовые навыки отладки. Ваш первый шаг должен был смотреть на 'ncol (minsp)' после возникновения ошибки. Ваш второй шаг, глядя на 'minsp'. – Roland

ответ

0

Вы забыли drop = FALSE:

iris <- iris[, 1, drop = FALSE] 
iris[order(iris[,1]),] 
#a vector; ncol would return NULL 
iris[order(iris[,1]), , drop = FALSE] 
#a data.frame 
+0

Спасибо, что, похоже, исправил его. – tom91

Смежные вопросы