在循环中分配一个函数

use*_*273 2 r

我试图为循环中的每个元素分配一个函数。我希望函数使用变量的值,但它们使用变量的最后一个值:

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"
Run Code Online (Sandbox Code Playgroud)

谢谢

koh*_*ske 5

也许这是最简单的方法:

assign.instrumentslist = function() {
  for(instList in lists.instruments) {
    local({
      i <- instList
      assign(
             paste("test", instList, sep="."),
             function() {print(i)},
             pos = .GlobalEnv
             )
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

关键是i在函数的封闭环境中创建本地对象 ( )。在此示例中,环境由 生成local

这是一个非常非常糟糕的黑客:

lapply(lists.instruments, 
  function(x) .GlobalEnv[[paste("test1", x, sep=".")]] <- function() print(x))
Run Code Online (Sandbox Code Playgroud)