r - 在循环中分配一个函数

标签 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"

谢谢

最佳答案

可能这是最简单的方法:

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

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

这是一个非常非常糟糕的 hack:

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

关于r - 在循环中分配一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801208/

相关文章:

r - 如果语句在 Shiny 中不起作用

R: 如何在 Debug模式下打印名为 "Q"的变量?

在 R (zoo) 中对后视数据滚动应用时间序列

r - 翻转字符串的两侧

R,ggplot2,热图

python - R 网状导入第二个 python 文件中的模块不起作用

r - updateSelectInput 标签不接受 HTML 标签?

r - Pinheiro 和 Bates 的非线性混合效应模型的收敛问题

r - 使用 cbind 将向量与向量列表绑定(bind)

r - 如何将向量附加到 R 中的向量列表?