Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 跨列表映射函数,但使用不同的函数输入_R_List_For Loop - Fatal编程技术网

R 跨列表映射函数,但使用不同的函数输入

R 跨列表映射函数,但使用不同的函数输入,r,list,for-loop,R,List,For Loop,我正在寻找一种将函数映射到列表的方法,但是能够为每个迭代赋予函数不同的输入 下面是一个简单的例子: example_func <- function(a, b, c) { z = a + b + c return(z) } ex_list <- list(5, 14, 32) 我知道我也可以: lapply(ex_list, function(x) example_func(x, 45, 43) 但该示例将使用45和43进行Lappy中的每个迭代。例如,我如何给它这三组

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

下面是一个简单的例子:

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

ex_list <- list(5, 14, 32)
我知道我也可以:

lapply(ex_list, function(x) example_func(x, 45, 43)
但该示例将使用45和43进行Lappy中的每个迭代。例如,我如何给它这三组参数来迭代列表中的三个元素

c(x, 45, 43)
c(x, 3, 33)
c(x, 23, 22)
或者另一个类似的例子是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))...
set.seed(123)

df只需将其他值放在另外两个列表中,例如,
l2
l3
。然后使用
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

exu list使用
tidyverse
,这是
purrr
的作业。使用
pmap
功能,您可以遍历多个列表

示例函数
#> [[2]]
#> [1] 50
#> 
#> [[3]]
#> [1] 77
示例_func(ex_列表[[1]]、ex_args1[[1]]、ex_args2[[1]])
#> [1] 93
示例_func(ex_列表[[2]]、ex_args1[[2]]、ex_args2[[2]])
#> [1] 50
示例_func(ex_列表[[3]]、ex_args1[[3]]、ex_args2[[3]])
#> [1] 77
purrr
软件包帮助您进行函数编程和迭代。您应该查看,因为它可以帮助您完成其他任务,例如使用
purr::walk
使用
write.csv
进行迭代

一个示例使用dataframe提供迭代列表并通过命名参数进行匹配。

示例函数%pmap\u dbl(示例函数)
#> [1] 93 49 77

太棒了,谢谢你,我想这正是我想要的。最后一个快速问题。如果
example_func
的第一个参数是一个数据帧,并且我想保持该数据帧对象不变,该怎么办?因此,与其使用
example_func(ex_list[[1]]、ex_args1[[1]]等
,不如使用
example_func(df、ex_args[[1]]、ex_args2[[1]]
pmap
中为
example_func
提供一些固定参数
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