使用特定环境变量执行函数

时间:2017-12-13 15:31:37

标签: r environment-variables

我显然不明白如何使用环境,所以也许有人可以帮助我。我想在sapply中评估这些功能,因此他们使用k = 1

fList <- list(function(x) k + 3, function(x) k + 4)
k <- 3
t <- sapply(1:2,
            function(x) {
               f <- fList[[x]]
               evalq(s <- f(1), list(k = 1))
               evalq(s <<- f(1), list(k = 1))
               s
             })
t

1 个答案:

答案 0 :(得分:2)

R中的函数使用词法范围。这意味着他们在定义的环境中查找变量值,而不是在运行它们的位置。但是,您可以更改功能的环境。这是可能的(不一定推荐)

fList <- list(function(x) k + 3, function(x) k + 4)
k <- 3
t <- sapply(1:2,
            function(x) {
              f <- fList[[x]]
              env <- new.env(parent=baseenv())
              env$k <- 1
              environment(f) <- env
              s<-f(1)
              s <<- f(1)
              s
            })
t
# [1] 4 5

你也可以使用表达式而不是函数

eList <- expression( k + 3, k + 4)
k <- 3
t <- sapply(1:2,
            function(x) {
              e <- eList[[x]]
              s <- eval(e, list(k = 1))
              s <<- eval(e, list(k = 1))
              s
            })
t

但最好不要在函数中保留自由变量,并明确地将参数或环境传递给该函数。