【问题标题】:How would you run a loop to randomize a community matrix and store them?您将如何运行循环来随机化社区矩阵并存储它们?
【发布时间】:2018-03-29 20:05:55
【问题描述】:

我从事社区生态工作,我正在尝试将我的矩阵随机化约 999 次,并为这 999 次中的每一次提取一个 beta 多样性值。这有望给我一个空分布来比较我的实际值。但是,我很难运行循环函数来执行此操作。

下面是一些示例数据:

com.dat<-matrix(c(10,0,0,0,5,0, 0,3,4,0,0,9, 0,0,8,6,0,0, 7,0,9,0,0,0, 
5,3,2,2,1,2),nrow=5,byrow=TRUE)
rownames(com.dat)<-c("Site1","Site2","Site3","Site4","Site5")
colnames(com.dat)<-
c("Species1","Species2","Species3","Species4","Species5","Species6")

这是我一次迭代要做的:

library(picante)
x<-randomizeMatrix(com.dat, null.model = "richness", iterations = 1000)
library(betapart)
b<-beta.multi.abund(x, index.family = "bray")

B 是我想要保留的值,并有 998 个其他值。 所以我尝试运行一个循环来获取从 randomizeMatrix 函数随机生成的 999 个矩阵

table<-list()

for (i in 1:999) {
  table[i]<-randomizeMatrix(com.dat, null.model = "richness", iterations = 
1000)
}

现在我的循环制作能力仍处于新手水平,但我很确定上述循环应该可以工作。列表能够存储多个矩阵(据我所知),所以 table[i] 应该能够保存 999 个初始矩阵的随机版本,对吗?然而,每次我尝试运行它时,都会导致我的 Rstudio 会话超时。

最终我想获得一个包含 999 个随机“b”值的数据框。任何帮助,将不胜感激。

【问题讨论】:

  • 您可以使用lapplylapply(1:999, function(i) randomizeMatrix(com.dat, null.model = "richness", iterations = 1000)) 创建矩阵的list。此外,如果您正在使用 for 循环,请将 list 初始化为您需要的长度,即 lst &lt;- vector('list', 999) 并分配输出,如 lst[[i]] &lt;- randomize...
  • @akrun 好的,谢谢,我想补充一点,函数代码'b
  • 我并不完全清楚。你需要do.call(cbind, lapply(1:2, function(i) {x &lt;- randomizeMatrix(com.dat, null.model = "richness", iterations = 1000);unlist(beta.multi.abund(x, index.family = "bray"))}))吗(这里我只用了2次迭代)
  • @akrun 是的,几乎!除了我希望这些列是 bray.bal、bray.gray 和 beta.bray (在您的示例中它们是行)并且我希望这些行代表我执行该函数的每个矩阵(因此将是 999 行)
  • 我发布了您要求的更改

标签: r matrix random


【解决方案1】:

我们可以使用lapply 来做到这一点

do.call(rbind, lapply(1:2, function(i) {
      x <-  randomizeMatrix(com.dat, null.model = "richness", iterations = 1000)
      unlist(beta.multi.abund(x, index.family = "bray"))
    }))
#     beta.BRAY.BAL beta.BRAY.GRA beta.BRAY
#[1,]     0.7686567   0.008321701 0.7769784
#[2,]     0.6693548   0.012815704 0.6821705

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多