gpt4 book ai didi

R:如何使用 ... 将参数传递给定义良好的多个函数?

转载 作者:行者123 更新时间:2023-12-04 17:10:27 25 4
gpt4 key购买 nike

V1 : 假设函数 f(x, ...)g(x , ...)可以传递不同的参数。如果我要使用它们定义一个新函数,我可以通过 ... 传递参数吗?运算符定义明确?作为一个简单的例子:

f1 = function(x, n = 1) x + n
g1 = function(x, m = 1) x + m
f = function(x, ...) f1(x, ...)
g = function(x, ...) g1(x, ...)

h = function(x, ...) {

fgList = list()
fgList[["f"]] = f(x, ...)
fgList[["g"]] = g(x, ...)
return(fgList)
}

h(1:4)
# $f
# [1] 2 3 4 5

# $g
# [1] 2 3 4 5

h(1:4, n = 2)
# Error in g1(x, ...) : unused argument (n = 2)

参数 n正在传递给函数 fg ,但它仅适用于函数 f .我想减轻这种情况。

V2:如果它们是我定义的函数,那么下面 Hong Ooi 的解决方案就可以完美运行。

这个解决方案可以扩展到没有 ... 的预定义函数吗?参数或等效的,可以是 ...参数被“添加”到一个没有的预定义函数?例如:
h = function(x, ...) mean(x, ...) * median (x, ...)
h(1:4, test = 1)
## Error in median(x, ...) : unused argument (test = 1)

最佳答案

您不能有多个版本的 ...在一个环境中。但是,您可以做的是给每个被调用的子函数一个 ...他们自己的论点。这意味着它们将忽略传递下来的与它们自己的形式参数不匹配的任何参数。

f1 = function(x, n = 1, ...) x + n
g1 = function(x, m = 1, ...) x + m

> h(1:4, n = 2)
$f
[1] 3 4 5 6

$g
[1] 2 3 4 5

编辑以回答添加的问题:您可以制作新版本的 median ,当您在自己的代码中调用它时,它将覆盖预定义的函数。 (由于 R 命名空间的工作方式,其他预定义函数仍将使用现有版本。)
median <- function(x, na.rm=FALSE, ...)
base::median(x, na.rm) # function median exported from base package

关于R:如何使用 ... 将参数传递给定义良好的多个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com