如果输入需要是循环中的列表怎么办:除了 `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. lapply
将 L
的元素作为 data.frame
输入到 foo
而 foo
需要 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]))
假设我们有一个 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. lapply
将 L
的元素作为 data.frame
输入到 foo
而 foo
需要 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]))