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