如何仅对函数的一个特定参数使用lapply?

时间:2019-12-13 16:27:35

标签: r

因此,我有一个函数接受多个参数,我想仅对其中一个参数的值使用apply。 我将使用一个示例:

v<-c("a","b","c","d")

f<-function(arg1,arg2,arg3,arg4){
}

我尝试使用此行代码,因为我只想使用“ arg2”:

x<-lapply(v,f(),arg2=arg2)

不幸的是我得到了错误:

check_args_given_nonempty(args,c(“ arg1”,“ arg2”,“ arg3”,“ arg4”,:   您必须为以下至少一项提供非空值: arg1 arg2 arg3 arg4

预先感谢您的回答

1 个答案:

答案 0 :(得分:1)

1)指定固定参数,如下所示:

f <- function(x1, x2, x3, x4) paste(x1, x2, x3, x4)
lapply(1:5, f, x1 = "a", x3 = "c", x4 = "d")

给予

[[1]]
[1] "a 1 c d"

[[2]]
[1] "a 2 c d"

[[3]]
[1] "a 3 c d"

[[4]]
[1] "a 4 c d"

[[5]]
[1] "a 5 c d"

2)或将其包装为一个参数的函数:

lapply(1:5, function(x) f("a", x, "c", "d"))

3)还有许多软件包可以接受一个函数作为输入并输出一个带有固定固定参数(称为currying)的函数。这是两个可以处理函数的软件包。

library(purrr)
lapply(1:5, partial(f, list(x1 = "a", x3 = "c", x4 = "d")))

library(functional)
lapply(1:5, Curry(f, x1 = "a", x3 = "c", x4 = "d"))