洗牌data.frame后仅删除零行
我尝试了几次用替换的data.frame重新采样。该数据框是一个逐物种的矩阵。此数据中有几个零,这意味着重采样过程有时只生成零行。因此,我想消除每个for循环中只有零行的矩阵,因为函数multipart vegan包不接受这些矩阵 提前谢谢大家洗牌data.frame后仅删除零行,r,R,我尝试了几次用替换的data.frame重新采样。该数据框是一个逐物种的矩阵。此数据中有几个零,这意味着重采样过程有时只生成零行。因此,我想消除每个for循环中只有零行的矩阵,因为函数multipart vegan包不接受这些矩阵 提前谢谢大家 require(vegan) # DATA (Edited) dat <- read.table("df.stack.txt", h=T) # Link above mat <- dat[,c(-1, -2, -3)] levels &l
require(vegan)
# DATA (Edited)
dat <- read.table("df.stack.txt", h=T) # Link above
mat <- dat[,c(-1, -2, -3)]
levels <- dat[,1:3]
## Vectors for saving desired statistics
alfa.null <- NULL
beta1.null <- NULL
beta2.null <- NULL
## Shuffling matrices ## Here is the problem
times <- 99
for (i in times) {
mat.rand <- sample(mat, replace=TRUE) ### Problem to be solved - some matrices will have only zero rows
div.aleat <- multipart(mat.rand ~ ., levels, index="renyi", scales=1, nsimul=99, global=TRUE)
alfa.null[i] <- div.aleat$statistic[[1]]
beta1.null[i] <- div.aleat$statistic[[4]]
beta2.null[i] <- div.aleat$statistic[[5]]
}
在得到非零矩阵之前,您需要继续重新采样,如下所示:
times <- 99
for (i in seq.int(times)) {
while(TRUE){
mat.rand <- sample(df, replace=TRUE) ### Problem to be solved - some matrices will have only zero rows
if(any(rowSums(mat.rand)!=0))
break
}
blah blah blah
}
如果您的矩阵名为mat,您可以执行mat[applymat,1,functionx{!allx==0},],谢谢@eipi10。但我不能删除任何行。实际上,每当一个随机矩阵只有零行时,我需要启动另一个循环。因此,当我运行rowSumsmat.rand>0时,创建的99个矩阵必须只有真值。我认为问题在于,如果有任何行都将为零,multipart将引发该错误。要仅从非零行进行采样,可以在原始代码中将sampledf,replace=TRUE替换为sampledf[rowSumsmat.rand!=0,],size=nrowdf,replace=TRUE。如果希望原始尺寸为sameThank you@Jthorpe,则size=nrowdf是可选的。我相信,伊法尼马特·兰德=0应为ifanyrowSumsmat.rand=0,因为多部分的问题是站点是没有物种的行,只有零。我更新了代码以反映您的建议。顺便说一句,我没有函数切割器,所以我无法运行您的完整示例…不幸的是,它不起作用。当某些行中的rowSums==0时,代码似乎没有停止。我已经在正文中上传了我的数据链接,以删除cutter`功能。我相信您现在可以完全运行此示例
times <- 99
max_Tries <- 100
for (i in seq.int(times)) {
tries = 0
while(TRUE){
mat.rand <- sample(df, replace=TRUE) ### Problem to be solved - some matrices will have only zero rows
if(any(rowSums(mat.rand)!=0))
break
tries <- tries + 1
if(tries > max_Tries)
stop("number of tries exceeded max_Tries: possible infinite loop")
}
blah blah blah
}