【问题标题】:Error: argument of length 0 returned in R错误:在 R 中返回长度为 0 的参数
【发布时间】:2015-07-02 06:15:02
【问题描述】:

背景:

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

我在这个脚本运行错误时遇到了许多问题,我认为我已经找到了解决方案,但我是 R 的新手,无法修复这个最新的问题。

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

丰度1

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

最大 1

 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

分钟1

 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 为最大值,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),]

但是我显然搞砸了,因为当我运行脚本的下一部分时,我收到一个错误,上面写着 Error in 1:ncol(minsp) : argument of length 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)

我完全不知所措,不知道下一步该做什么。谁能给我一些关于我哪里出错的指示?

提前致谢

【问题讨论】:

  • 您需要掌握基本的调试技能。发生错误后,您的第一步应该是查看ncol(minsp)。你的第二步,看minsp

标签: r


【解决方案1】:

你忘记了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

【讨论】:

  • 谢谢,这似乎已经解决了。
猜你喜欢
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多