【问题标题】:Repeating a function on a matrix multiple times and summing resulting matrices多次在矩阵上重复一个函数并对结果矩阵求和
【发布时间】:2020-01-20 22:32:03
【问题描述】:

我在尝试多次重复一行代码时遇到了在 R 中编写代码的问题。

我写了以下代码:

rep(blank.matrix<-((distance(site.by.species[sample(nrow(site.by.species)),], method='jaccard')<=existing.jaccard.similarity)*1)+blank.matrix,times=100)

我正在尝试按物种矩阵排列站点:

site.by.species[sample(nrow(site.by.species)),]

然后从中得到一个jaccard相似度矩阵:

distance("", method='jaccard')

然后将它与现有的相似度矩阵进行比较,我想在其中找到所有小于或等于它的值

<=existing.jaccard.similarity

然后我想运行 100 次 - 将每个创建的矩阵中的 1 和 0 加在一起,这样我就有了一个输出,它给出了我的 existing.jaccard.similarity 值小于等于我的置换值的次数.

我遇到的问题是我的矩阵非常大(8000x700),所以当我重复

错误:无法分配大小为 x Gb 的向量。

我对此感到惊讶,因为我认为我只会将更新的 blank.matrix 存储到内存中 - 但我意识到可能还有其他方法可以通过 apply() 或 for 循环来解决这个问题。感谢您对如何清理此代码的任何帮助!

【问题讨论】:

  • 编辑:我现在意识到 rep() 函数甚至没有真正重复该代码,所以也许我比我最初想象的更迷茫。
  • 也许你需要replicate(100, code_goes_here),它使用一个实际的expression,它应该可以满足你的更多需求。
  • 我刚试过这个,但它似乎运行了正确的 jaccard 相似性,但由于某种原因,输出矩阵(blank.matrix)在所有运行后都填充了 NA 值,这是我运行的内容:replicate(2, blank.matrix
  • outside做作业,如results &lt;- replicate(2, distance(...))?
  • results&lt;-replicate(2, ((distance(site_spe3[sample(nrow(site_spe3)),], method='jaccard')&lt;=jaccard.similarity)*1)) 这真的很接近,但是,它返回一个包含每个矩阵的数组,我想简单地将它们加在一起。我可以在运行后对它们求和,但是当我想运行 100-1000 次时,仅 2 次复制结果数组约为 400mb。我的想法是,必须有某种方法在创建每个结果矩阵时对其求和,以便最终结果只是一个求和矩阵。非常感谢您的帮助!

标签: r loops matrix memory bioinformatics


【解决方案1】:

我找到了解决办法:

repeat{
  results = ((distance(site.by.species[sample(nrow(site.by.species)),],method='jaccard')<=jaccard.similarity)*1) + results
   print(results[1,1])
   if (results[1,1] == 100){
     print("repeat loop ends");
     break
   }
}

我在这里使用了 repeat 函数,因为我只想输出一个矩阵,而不是将所有矩阵一起作为一个数组输出,这就是我使用 replicate() 方法得到的结果。我的repeatresults[1,1] 达到 100 时结束,因为矩阵中的这个元素是同一站点的相似性,它将始终等于 jaccard.similarity 表 ([2,2];[3,3];and以此类推也可以),因此每次运行都会在此列中添加 1。

可能有更简单的方法可以做到这一点!

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多