【发布时间】:2018-02-20 03:09:48
【问题描述】:
mat <- large matrix
f1 <- function(M) {
X <<- M
f1 <- function() {
do something with X but does not modify it
}
}
f1(mat)
X is no longer in scope
如何在 R 中实现上述伪代码中描述的内容?在 MATLAB 中,您可以使用“全局 X”。 R中的等价物是什么?如果没有,处理上述情况的最有效方法是什么:一个函数将一个大矩阵作为参数,其中许多不同的辅助函数作用于该矩阵(但不要修改它)因此矩阵需要尽量少复制。感谢您的帮助。
【问题讨论】:
-
你在 X 上执行什么样的操作?如果您不希望 R 重复复制矩阵,您可能需要“通过引用更改”的东西
-
由于词法作用域,内部函数应该已经可以访问
M,所以我不确定X <<-分配会实现什么。此外,R 已经尝试不复制,除非有必要,所以我不确定这实际上是一个多大的问题,请参阅discussion here。 -
@Marius 内部、内部函数呢?如果我使用 X
-
我还想提一下,我的函数需要 gpu 支持,所以我使用的是 gpuR 的 vclMatrix。这些矩阵位于 GPU RAM 中,因此即使在 GPU 矩阵制作完成后,我也绝对无法复制它,否则内存将被真正堵塞。
-
我可能是错的,但我认为如果你将它作为参数传递并且不修改它,R 实际上并没有制作对象的副本。如果是,您可以使用
data.tables,然后就不会了。
标签: r matrix scope global-variables memory-efficient