将用户定义的列表放在for循环中

时间:2017-07-28 13:53:27

标签: r list for-loop user-defined-functions

当在for循环中将用户定义的函数放在R列表中时,我遇到了问题。

我必须根据一些参数定义一些特定于段的函数,所以我创建函数并将它们放在一个循环遍历带有for循环的段的列表中。问题是我在结果列表中的每个地方都获得相同的功能。

代码如下所示:

n <- 100
segmenty <- 1:n
segment_functions <- list()
for (i in segmenty){
   segment_functions[[i]] <- function(){return(i)}
}

当我运行代码时,我获得的是所有索引的相同函数(最后在循环中创建):

## for all k
segment_functions[[k]]()
[1] 100 

当我手动将功能放在列表上时没有问题,例如

   segment_functions[[1]] <- function(){return(1)}
   segment_functions[[2]] <- function(){return(2)}
   segment_functions[[3]] <- function(){return(3)}

工作正常。

我很不清楚什么是错的。你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

您需要使用force函数来确保在分配到列表期间完成对i的评估:

n <- 100
segmenty <- 1:n
segment_functions <- list()

f <- function(i) { force(i); function() return(i) }

for (i in segmenty){
  segment_functions[[i]] <- f(i)
}

答案 1 :(得分:1)

我在包装器的封闭中使用lapply并捕获i

segment_functions <- lapply(1:100, function(i) function() i)