将用户定义的列表放在 for 循环中
Putting user-defined on a list in for loop
当将用户定义的函数放在 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)}
工作正常。
老实说,我不知道出了什么问题。你能帮忙吗?
我会使用 lapply
并在包装器的闭包中捕获 i
:
segment_functions <- lapply(1:100, function(i) function() i)
您需要使用 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)
}
当将用户定义的函数放在 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)}
工作正常。
老实说,我不知道出了什么问题。你能帮忙吗?
我会使用 lapply
并在包装器的闭包中捕获 i
:
segment_functions <- lapply(1:100, function(i) function() i)
您需要使用 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)
}