r - 如何在并行包的“应用”函数中将行更改分配给现有矩阵
问题描述
在 R 中,可以使用函数<<-
内的符号lapply()
为外部的变量赋值lapply()
。
让我们考虑一个充满 1 的矩阵:
m<-matrix(data=1, nrow=5, ncol=5)
假设我想用赋值符号 1,2,3,4 和 5 替换每一行<<-
。我可以使用函数 lapply 函数(它不是那种操作的设计函数,这只是一个例子):
lapply(X = seq(nrow(m)), FUN = function(r){
m[r,]<<-seq(5)
})
这将起作用。
但是,如果我现在像这样使用 mclapply:
mclapply(X = seq(nrow(m)), FUN = function(r){
m[r,]<<-seq(5)
})
矩阵 m 将保持为 1。
这个想法是将更改应用于矩阵的行,而不是创建新的行,而是将它们分配到现有的行中。唯一的限制是使用并行包中的函数(例如 mclapply(),但也许另一个函数更适合)。
同样使用该<<-
符号也不是强制性的。
我怎样才能做到这一点 ?
解决方案
您不能并行分配,因为您只是分配给矩阵的本地副本。
两种解决方案:
使用共享内存(例如使用包 {bigstatsr} 在磁盘上的矩阵;免责声明:我是作者)
不要一开始就分配。只需运行
lapply()
,将所有结果部分作为列表并使用do.call("rbind", list)
.
推荐阅读
- c - eBPF BPF_ARRAY 查找
- r - 通过根据条目和变量值之间传递的时间量创建唯一 ID 列来对数据框行进行分组
- prometheus - Prometheus 算术运算符:缺少匹配项的默认值?
- python - 三元运算符不使用条件赋值
- python - 是否可以从 python 代码对象中获取 AST?
- python - Python:如何生成 1.0 和 0.0 的随机矩阵,但使用浮点数?
- office365 - 请选择一个证书来验证您自己
- javascript - 如何根据按钮选择隐藏和显示单个表格?
- javascript - Gatsby 博客文章 - 如何将丰富的片段添加到从 YouTube 嵌入的视频中
- openmodelica - OpenModelica 中的变量过滤器