错误:R

时间:2015-07-02 06:15:03

标签: r

背景:

我目前正在使用功能多样性索引FRis,其中R脚本位于:http://www.irstea.fr/la-recherche/unites-de-recherche/hyax/ecology-schleuter-2010

我遇到了很多问题,这个脚本运行错误,我认为我找到了解决方案,但我是R的新手并且无法解决这个问题。

它涉及使用三个数据框架,每种栖息地类型的每种动物的数量,以及每个物种的特征的最大值和最小值,例如:

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 for max和rownamesm为最小。

在此之后,它发回错误,说maxsp [order(rownamesM,)的维度数量错误,minsp也是如此。我认为这可能是因为提取功能减小了尺寸,所以我添加了drop = 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):长度为0的参数

以下是该脚本的下一部分:

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)

我完全失去了,不知道接下来该做什么。有人可以给我一些关于我哪里出错的指示吗?

提前致谢

1 个答案:

答案 0 :(得分: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