背景:
我目前正在使用功能多样性索引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)
我完全失去了,不知道接下来该做什么。有人可以给我一些关于我哪里出错的指示吗?
提前致谢
答案 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