【发布时间】:2014-12-14 07:22:11
【问题描述】:
在 R 中,我尝试为向量的每个元素创建一个闭包,并让它在运行时访问该特定元素。
我有一个值向量:
the.vector <- c('a', 'b', 'c')
如果我运行一个迭代向量的函数,运行一个返回每个元素的简单函数,最终结果将是list('a', 'b', 'c')。它看起来像这样(为简洁起见,输出被简化):
Test1 <- function() {
lapply(the.vector, function(element) {
element
})
}
Test1()
list('a', 'b', 'c')
现在,如果我遍历向量,创建一个访问每个元素的闭包,然后遍历 that 并运行每个闭包,结果是list('c', 'c', 'c') (!)。它看起来像这样:
Test2 <- function () {
closures <- lapply(the.vector, function(element) {
function() {
element
}
})
lapply(closures, function(closure) {
closure()
})
}
Test2()
list('c', 'c', 'c')
总而言之:我希望内部闭包引用每个元素,以便Test2 的结果与Test1 相同。
我很确定这是由于 R 解析变量名的方式,因为它是词法范围;我可能会以动态范围界定的方式来处理它。但是,这并不能解决我的问题,我不知道该怎么做。
达到预期结果的最佳方法是什么?
【问题讨论】: