代码之家  ›  专栏  ›  技术社区  ›  温泽海

R从公式中获取局部变量

  •  0
  • 温泽海  · 技术社区  · 1 年前

    考虑R代码:

    foo <- function(formula){
        Y <- get(formula[[2]])
        print(Y)
    }
    main <- function(){
        Y <- 1
        X <- 2
        foo(Y ~ X)
    }
    main()
    

    结果表明,在 get(formula[[2]]) ,找不到对象 Y . 如何使函数在本地设置中读取公式? 如何更改代码以使其运行和打印 Y ?

    1 回复  |  直到 1 年前
        1
  •  3
  •   Axeman    1 年前

    默认情况下 get 将寻找 Y 在当前呼叫环境中 得到 ,这正是可用的 foo 自身(即。 pos = -1 ). R公式的一个优点是它们有一个关联的环境作为属性,因此我们可以指定 得到 它应该在那个环境中寻找:

    foo <- function(formula){
      Y <- get(formula[[2]], environment(formula))
      print(Y)
    }
    
    main()
    
    [1] 1
    

    指定环境通常是一个好主意,因此,例如,这仍然会得到 Y 从原始上下文来看:

    foo <- function(formula){
      Y <- 3
      bar <- get(formula[[2]], environment(formula))
      print(bar)
    }