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
如何实现上述pseudocode中所述的内容?在MATLAB中,您可以使用"全局X"。R中的等效物是什么?如果没有,那么处理上述方案的最有效方法是什么:一个函数将大矩阵作为一个参数,其中其中许多不同的助手功能在该矩阵上作用(但不修改(,因此矩阵需要尽可能少的次。感谢您的帮助。
我不确定您要使用助手功能实现什么,但是正如评论中提到的@marius,内部功能应该已经可以访问M
。因此,这样的代码将有效:
f1 <- function(M) {
f2 <- function() {
f3 <- function() {
# f3 divides M by 2
M/2
}
# f2 prints results from f3 and also times M by 2
print(f3())
print(M * 2)
}
# f1 returns results from f2
return(f2())
}
mat <- matrix(1:4, 2)
f1(mat)
# [,1] [,2]
# [1,] 0.5 1.5
# [2,] 1.0 2.0
# [,1] [,2]
# [1,] 2 6
# [2,] 4 8
mat
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
在这里f1
中无需执行X <<- M
,特别是如果您不希望M
的副本在内存中。