r - 多次在矩阵上重复一个函数并对结果矩阵求和
问题描述
尝试多次重复一行代码时,我遇到了在 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),所以虽然当我重复 <5 次时这段代码似乎运行,但当我尝试重复更多次时,我得到了错误:
错误:无法分配大小为 x Gb 的向量。
我对此感到惊讶,因为我认为我只会将更新的 blank.matrix 存储到内存中 - 但我意识到可能还有其他方法可以通过apply()
或 for 循环来解决这个问题。我感谢任何有关如何清理此代码的帮助!
解决方案
我找到了一个解决方案:
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()
方法得到的结果。repeat
一旦命中 100,我就结束了,results[1,1]
因为矩阵中的这个元素是同一站点的相似性,它将始终等于jaccard.similarity
表([2,2];[3,3]; 等等也可以),所以每个运行将 1 添加到此列。
可能有更简单的方法可以做到这一点!
推荐阅读
- javascript - 第二次尝试创建画布并设置其宽度失败
- qt - Qt5/PyQt5 最佳实践
- linux-kernel - 我无法在我的 debian 9 中创建内核模块
- r - if 语句根据数据帧中的其他值为数据帧分配值
- python - 为什么线程不等待输入就结束了?
- android - 当我尝试使用自定义 EditText 时应用程序崩溃
- magento - 证明与 magento 2.3 的集成
- amazon-web-services - 如何使用 Aws SQS 作为事件源并根据事件属性调用不同的 Lamda 函数
- javascript - 如何将函数作为参数传递给 Javascript 中的另一个函数?
- android - 如何在 android studio 中从 HEX/Integer 获取颜色名称