如果输入需要是循环中的列表怎么办:除了 `for` 之外的任何选项?

What if input needs to be a list in a loop: Any option other than `for`?

假设我们有一个 foo <- function() 只需要 A_Named_List_of_One_data.frame 作为输入。例如:list(A = data.frame(d = 1:2)).

现在,假设我们有 A_Named_List_of_Several_data.frames 保存在对象 L 中。例如:

L = list(A = data.frame(d = 1:2), B = data.frame(d = 3:5))。 所以要输入 L 个元素,我们需要将它们循环到 foo().

我的理解是,在这种情况下唯一的循环选项for如下。还有其他选择吗?

  output <- list()
  for(i in seq_along(L)) { output[[i]] <- foo(L[i]) }
  setNames(output, names(L))

ps. lapplyL 的元素作为 data.frame 输入到 foofoo 需要 L 的每个元素都是 A_Named_List_of_One_data.frame.

如果您正在寻找应用系列或相关循环,请循环遍历名称并使用 [ 在列表 returns 列表上的事实:

lapply(names(L), function(nm) foo(L[nm]))

使用map

library(purrr)
map(names(L), ~ foo(L[.x]))