【问题标题】:Putting user-defined on a list in for loop将用户定义的列表放在 for 循环中
【发布时间】:2017-07-28 13:53:27
【问题描述】:

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

我必须根据一些参数定义一些特定于段的函数,所以我创建函数并将它们放在一个列表中,通过 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)}

工作得很好。

老实说,我不知道出了什么问题。你能帮忙吗?

【问题讨论】:

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

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


【解决方案1】:

你需要使用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)
}

【讨论】:

    【解决方案2】:

    我会使用 lapply 并在包装器的 clousre 中捕获 i

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2018-12-17
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多