您好,我根据您文章”R语言并行计算 deviation of null beta diversity(beta多样性零偏差)”输入代码计算时报错:
Error in { : task 1 failed - "没有"vegdist"这个函数" ,请问这如何解决,万分感谢
计算beta多样性零偏差报错
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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) }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥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报错,求解