gpt4 book ai didi

r - 如何将父函数中的 "..."参数传递给r中的两个子函数

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

我正在尝试将一组参数传递给函数。该函数有两个子函数,它们是上述参数集的一部分。

在下面的“SIMPLIFIED”示例中f_combined是使用...的函数
我想进行以下函数调用,以便将xx传递给f_sqr,并且将yy传递给f_plus:

f_combined(xx = 2, yy = 2)

但这会给我一个错误:
Error in f_sqr(...) : unused argument (yy = 2) 

有什么建议吗?
f_sqr <- function(xx =1){
xx ^ 2
}

f_plus <- function(yy =1){
yy + 1
}

f_combined <- function(...){
f_sqr(...) + f_plus(...)
}

最佳答案

或者,您可以查询函数的formals()以查看其期望的命名参数,并仅传递这些参数。如果“child”函数接受...,那么我们将传递所有参数。此方法不适用于位置参数。

f_combined <- function(..., .fns =list(f_sqr, f_plus), .reduce=`+`){
dots <- list(...)
Reduce(.reduce, lapply(.fns, function(f) {
if ("..." %in% names(formals(f))) {
do.call(f, dots)
} else if ( any( names(dots) %in% names(formals(f)) ) ) {
do.call(f, dots[names(formals(f))])
} else {
f()
}
}))
}

在这里,我将这两个函数设置为作为参数( .fns=list(f_sqr, f_plus))运行,因此可以轻松更改它们或轻松添加更多功能。我还设置了一个参数,该参数指定如果您想对它们求和而不是对它们进行合计( .reduce='+'),则如何合并这些值。但是基本思想是找到最佳的数学命名参数集并将其传递。由于“子”函数的参数也具有默认值,因此当您不传递任何参数时它们也会运行。

这是一些示例电话
f_combined()
# [1] 3
f_combined(xx=2)
# [1] 6
f_combined(yy=2)
# [1] 4
f_combined(xx = 2, yy = 2)
# [1] 7

关于r - 如何将父函数中的 "..."参数传递给r中的两个子函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749661/

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