我试图为循环中的每个元素分配一个函数。
我希望函数使用变量的值,但它们使用变量的最后一个值:
assign.instrumentslist = function()
{
for(instList in lists.instruments)
{
assign(
paste("test", instList, sep="."),
function() {print(instList)},
envir = .GlobalEnv
)
}
}
lists.instruments = c("CL", "HO", "GC")
assign.instrumentslist()
test.CL()
# return "GC"
thx
也许这是最简单的方法:
assign.instrumentslist = function() {
for(instList in lists.instruments) {
local({
i <- instList
assign(
paste("test", instList, sep="."),
function() {print(i)},
pos = .GlobalEnv
)
})
}
}
关键是创建本地对象(i
)在函数的封闭环境上。
在此示例中,环境由以下内容生成local
.
这是一个非常非常糟糕的黑客:
lapply(lists.instruments,
function(x) .GlobalEnv[[paste("test1", x, sep=".")]] <- function() print(x))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)