全局变量仅在R函数范围内


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的副本在内存中。

相关内容

  • 没有找到相关文章

最新更新