计算beta多样性零偏差报错

您好,我根据您文章”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)
}