在列表中映射函数,但具有不同的函数输入

Mat*_* W. 0 for-loop r list

我正在寻找一种在列表上映射函数的方法,但是能够为每次迭代赋予函数不同的输入.

一个简单的例子如下:

example_func <- function(a, b, c) {
  z = a + b + c
  return(z)
}

ex_list <- list(5, 14, 32)
Run Code Online (Sandbox Code Playgroud)

在列表中的第一个元素上执行将如下所示:

example_func(ex_list[[1]], 45, 43)
Run Code Online (Sandbox Code Playgroud)

我知道我也可以:

lapply(ex_list, function(x) example_func(x, 45, 43)
Run Code Online (Sandbox Code Playgroud)

但是该示例将在lapply中的每个迭代中使用45和43.我怎么能给它,例如,这三组参数迭代列表中的三个元素?

c(x, 45, 43)
c(x, 3, 33)
c(x, 23, 22)
Run Code Online (Sandbox Code Playgroud)

或者另一个类似的例子是write.csv(),它接受对象,然后写入要写入的文件的名称.

set.seed(123)
df <- data.frame(x = sample(1:10, 1000, replace = TRUE))
df_list <- split(df, df$x)
lapply(df_list, function(x) write.csv(x, arg1))...
Run Code Online (Sandbox Code Playgroud)

我怎么能遍历这个列表并给出指定的名称来喂它?

我之前做过类似的事情,但是它会循环遍历seq_along列表,然后在名称向量中找到该索引.有一个更好的方法吗?

Rui*_*das 5

只需将其他值放在另外两个列表中,比如说l2l3.然后使用Map,这就是它的意思.

ex_list <- list(5, 14, 32)
l2 <- list(45, 3, 23)
l3 <- list(43, 33, 22)

Map(example_func, ex_list, l2, l3)
#[[1]]
#[1] 93
#
#[[2]]
#[1] 50
#
#[[3]]
#[1] 77
Run Code Online (Sandbox Code Playgroud)

这可以对任意数量的函数参数进行,每个函数参数都在自己的列表中设置.