【问题标题】:How to use lapply only for one specific argument of a function?如何仅将 lapply 用于函数的一个特定参数?
【发布时间】:2019-12-13 16:27:35
【问题描述】:

所以我有一个接受多个参数的函数,我想将 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", 中的错误: 您必须向其中至少一个提供非空值 参数1 arg2 arg3 arg4

提前感谢您的任何回答

【问题讨论】:

  • 这就是你的想法:lapply(1:4, function(x) {rnorm(n=10, mean=x, sd=5)})
  • 您能否发布一个更完整、更清晰的示例,最好有一些预期的输出?我不明白你在做什么。
  • fun&lt;-function(arg1,arg2,arg3,arg4){} x&lt;-lapply(v,f(x) fun(arg1, x, arg3,arg4))
  • 我期望的输出基本上是为向量“v”的每个成员执行函数......事情是“v”只能在函数的“arg2”中使用。我会发布实际功能,但它太具体了,我无法解释自己,对不起,我很困惑
  • 不管有什么其他问题,在调用lapply 时,您肯定需要去掉f() 之后的括号,就像x &lt;- lapply(v, f) 一样,因为包含括号意味着a对f() 的调用将作为参数FUN 传递给lapply,但没有括号,函数f 本身作为参数FUN 传递,这就是您想要的。

标签: r


【解决方案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) 还有一些包将接受一个函数作为输入并输出一个带有一些固定参数的函数,称为柯里化。这里有两个可以 curry 函数的不同包。

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"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2019-02-01
    • 2016-09-07
    • 1970-01-01
    • 2019-02-07
    • 2019-09-10
    • 1970-01-01
    • 2014-11-20
    相关资源
    最近更新 更多