gpt4 book ai didi

r - 在R中的函数之间传递缺少的参数

转载 作者:行者123 更新时间:2023-12-03 22:31:20 33 4
gpt4 key购买 nike

我了解到,通常的做法是在函数中使用可选参数,然后使用missing()检查它们
(例如,如SO 22024082中所述)

在此示例中,round0是可选参数(我知道,可以将round0定义为逻辑)。

foo = function(a, round0) {
a = a * pi
if(!missing(round0)) round(a)
else a
}


但是,如果我从另一个函数调用此函数,该如何传递“丢失”呢?

bar = function(b) {
if(b > 10) round1=T
foo(b, round1)
}


如果b <10,则bar()中的round1没有定义,但是无论如何都会传递给foo。如果我修改foo():

foo = function(a, round0) {
a = a * pi
print(missing(round0))
print(round0)
if(!missing(round0)) round(a)
else a
}


并运行bar(9),输出为:

bar(9)
[1] FALSE
Error in print(round0) : object 'round1' not found
Called from: print(round0)


这意味着:round0不会丢失,但是也无法访问吗?

我不想在bar()中使用不同的函数调用,如果foo()中有多个可选参数,则我将不得不为每个缺失/不缺失(所有可选参数的组合)编写一个函数调用。

是否可以通过“丢失”,或者有什么其他解决方案可以解决此问题?

最佳答案

在您的示例中,不缺少round0,它被设置为round1,这是未定义的(与之相反)。

通常,最好的方法是使用默认值,在您的情况下为FALSE

foo = function(a, round0 = FALSE) {
a = a * pi
if (!round0) round(a)
else a
}

bar = function(b) {
round1 <- FALSE
if (b > 10) round1=TRUE
foo(b, round1)
}


或者无法在参数列表中轻松表示默认值的地方:

foo = function(a, round0 = NULL) {
a = a * pi
if(!is.null(round0)) round(a)
else a
}

bar = function(b) {
round1 <- NULL
if (b > 10) round1=TRUE
foo(b, round1)
}


请注意,在两种情况下,您都需要在调用函数中将参数手动设置为默认值。

如果需要,您还可以在 foo语句中调用带或不带参数的 if函数:

bar = function(b) {
if (b > 10) foo(b, TRUE) else foo(b)
}


但是,据我所知,除了不将其作为参数传递外,您不能创建变量 missing

关于r - 在R中的函数之间传递缺少的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31557805/

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