2017-07-28 52 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)