您好,我根据您文章”R语言并行计算 deviation of null beta diversity(beta多样性零偏差)”输入代码计算时报错:
Error in { : task 1 failed - "没有"vegdist"这个函数" ,请问这如何解决,万分感谢
在foreach循环中加入library(vegan)后,您在试试看。具体如下:
#threads为拟使用的CPU数,dune为otu table,reps为模拟的次数
nulldiv <- function(dune,reps,threads){
library(reldist)
library(vegan)
library(bipartite)
library(foreach)
library(doParallel)
patches <- nrow(dune)
##Calculate beta-diversity for metacommunity
### Prepare and calculate abundance beta-null deviation metric
## Adjusted from Stegen et al 2012 GEB
bbs.sp.site <- dune
rand <- reps
null.alphas <- matrix(NA, ncol(dune), rand)
null.alpha <- matrix(NA, ncol(dune), rand)
expected_beta <- matrix(NA, 1, rand)
null.gamma <- matrix(NA, 1, rand)
null.alpha.comp <- numeric()
bucket_bray_res <- NULL
bbs.sp.site = ceiling(bbs.sp.site/max(bbs.sp.site))
mean.alpha = sum(bbs.sp.site)/nrow(bbs.sp.site) #mean.alpha
gamma <- ncol(bbs.sp.site) #gamma
obs_beta <- 1-mean.alpha/gamma
obs_beta_all <- 1-rowSums(bbs.sp.site)/gamma
##Generate null patches
registerDoParallel(cores = threads)
bucket_bray_res <- foreach (randomize = 1:rand,.combine = "cbind") %dopar% {
null.dist = dune
library(vegan)
for (species in 1:ncol(null.dist)) {
tot.abund = sum(null.dist[,species])
null.dist[,species] = 0
for (individual in 1:tot.abund) {
sampled.site = sample(c(1:nrow(bbs.sp.site)), 1)
null.dist[sampled.site, species] = null.dist[sampled.site, species] + 1
}
}
##Calculate null deviation for null patches and store
null.alphas[,randomize] <- apply(null.dist, 2, function(x){sum(ifelse(x > 0, 1, 0))})
null.gamma[1, randomize] <- sum(ifelse(rowSums(null.dist)>0, 1, 0))
expected_beta[1, randomize] <- 1 - mean(null.alphas[,randomize]/null.gamma[,randomize])
null.alpha <- mean(null.alphas[,randomize])
null.alpha.comp <- c(null.alpha.comp, null.alpha)
bucket_bray <- as.matrix(vegdist(null.dist, "bray"))
diag(bucket_bray) <- NA
bucket_bray_res <- apply(bucket_bray, 2, FUN="mean", na.rm=TRUE)
} ## end randomize loop
## Calculate beta-diversity for obs metacommunity
beta_comm_abund <- vegdist(dune, "bray")
res_beta_comm_abund <- as.matrix(as.dist(beta_comm_abund))
diag(res_beta_comm_abund) <- NA
# output beta diversity (Bray)
beta_div_abund_stoch <- apply(res_beta_comm_abund, 2, FUN="mean", na.rm=TRUE)
# output abundance beta-null deviation
abund_null_dev <- beta_div_abund_stoch - mean(bucket_bray_res)
return(abund_null_dev)
}