2017-07-28 51 views
0

将用户定义的函数存储在for循环中时,存在将用户定义的函数存储在R列表中的问题。将用户定义在for循环中的列表中

我必须根据一些参数定义一些特定于细分的函数,所以我创建函数并将它们放在循环中使用for-loop循环的列表中。问题是我在结果列表中的所有地方都有相同的功能。

的代码看起来是这样的:

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)} 

工作得很好。

我很荣幸不知道有什么问题。你能帮忙吗?

+0

您几乎完全重新创建了'force'帮助页面底部的示例,该示例显示了如何使其按预期工作 – Miff

回答

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

我会使用lapply和包装的clousre捕捉i

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