在 lapply 中指定 X 提供的参数
Specify which argument is supplied by X in lapply
我有一个功能,例如fun(a, b = 1, c = 3, ...)
,接受多个参数,其中一些具有默认值。我想使用 lapply(X, FUN, ...)
调用此函数,但明确指定我希望 X
提供哪个参数。在上面的示例中,可以为 a
或 b
或 c
或 ...
中的 xyz
提供 X
向量。
通常我会调用 lapply(1:5, fun, a = 4)
,我想它会使用 1:5
作为 b
参数。
- 有没有办法让它更明确?
- 如果我想为
b
使用默认参数并为 c
使用 1:5
怎么办?
- 如果我想使用
1:5
作为 ...
中的 xyz
参数怎么办?
处理您的用例的一种方法是在 lapply
向您公开的自定义函数中简单地调用您自己的函数:
lst <- list(v1=c(1:3), v2="Hello", v3=5)
result <- lapply(lst, function(x) {
y <- FUN(x, a, b, c, ...) # Here FUN() is your own function
return(y)
})
Normally I might call lapply(1:5, fun, a = 4)
and I imagine it would use 1:5 as the b argument.
是的,你的想象是正确的。 lapply
使用位置匹配将其 X
参数传递给函数。正常 rules of argument matching 适用,这意味着命名参数的精确匹配优先。
另一种方法当然是将 fun
包装在一个匿名函数中:
lapply(1:5, function(b, a, ...) fun(a = a, b = b, ...), a = 4)
我有一个功能,例如fun(a, b = 1, c = 3, ...)
,接受多个参数,其中一些具有默认值。我想使用 lapply(X, FUN, ...)
调用此函数,但明确指定我希望 X
提供哪个参数。在上面的示例中,可以为 a
或 b
或 c
或 ...
中的 xyz
提供 X
向量。
通常我会调用 lapply(1:5, fun, a = 4)
,我想它会使用 1:5
作为 b
参数。
- 有没有办法让它更明确?
- 如果我想为
b
使用默认参数并为c
使用1:5
怎么办? - 如果我想使用
1:5
作为...
中的xyz
参数怎么办?
处理您的用例的一种方法是在 lapply
向您公开的自定义函数中简单地调用您自己的函数:
lst <- list(v1=c(1:3), v2="Hello", v3=5)
result <- lapply(lst, function(x) {
y <- FUN(x, a, b, c, ...) # Here FUN() is your own function
return(y)
})
Normally I might call
lapply(1:5, fun, a = 4)
and I imagine it would use 1:5 as the b argument.
是的,你的想象是正确的。 lapply
使用位置匹配将其 X
参数传递给函数。正常 rules of argument matching 适用,这意味着命名参数的精确匹配优先。
另一种方法当然是将 fun
包装在一个匿名函数中:
lapply(1:5, function(b, a, ...) fun(a = a, b = b, ...), a = 4)