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中,您可以使用&#34;全局X&#34;。 R中的等价物是什么?如果没有,那么处理上述场景的最有效方法是什么:函数接受一个大矩阵作为参数,并且其中的许多不同的辅助函数作用于该矩阵(但不修改它)因此矩阵需要被复制的次数尽可能少。谢谢你的帮助。
答案 0 :(得分:0)
我不确定您希望使用辅助函数实现什么,但正如@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
此处X <<- M
无需执行f1
,尤其是如果您不想在内存中复制M
。