weixin_46731230 2023-05-19 16:52 采纳率: 100%
浏览 37
已结题

计算beta多样性零偏差报错

您好,我根据您文章”R语言并行计算 deviation of null beta diversity(beta多样性零偏差)”输入代码计算时报错:
Error in { : task 1 failed - "没有"vegdist"这个函数" ,请问这如何解决,万分感谢

  • 写回答

1条回答 默认 最新

  • 道阻且长1994 2023-05-19 17:11
    关注

    在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)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 5月19日

悬赏问题

  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解