【问题标题】:test whether default argument is used or is modified in function call in R测试在 R 的函数调用中是否使用或修改了默认参数
【发布时间】:2014-09-24 08:32:32
【问题描述】:

快速提问。我在 R 中编写了一些复杂的函数,我遇到了一种情况,我想使用几个函数默认值(例如,nA = 5、nB = 5、nPos = 4、nNeg = 4)。这些默认值是内置在函数中的,因此除非我想修改它们,否则我不必指定它们。但是,无论如何要在函数中做一些逻辑来查看它们是否被提及?

例如,假设用户仅指定 (nA=3 和 nB=5) ... 有没有一种方法可以从中获取数字 8,因为它们是用户在函数调用中明确引用的(相反依赖默认值?)。

希望这是有道理的。

【问题讨论】:

  • 你在函数内部使用变量,如果用户没有指定它们,它们将获得默认值。那么,除此之外,您究竟需要什么?
  • 这些都很有帮助。我知道默认值是在未指定时设置的。我想要的是判断用户是否在函数调用中明确指定了一个参数,而不是依赖于默认值。换句话说,函数有没有办法判断调用中是否指定了参数,而不是依赖默认值? (提示:一种解决方案可能是查看这些值是否为默认值,但我希望进行逻辑测试以查看它们是否在调用中被提及)。

标签: r function arguments logic


【解决方案1】:

missing()?

> f = function(a=1, b=2, c=3) missing(b)
> f(1, c=3)
[1] TRUE
> f(1, 3)
[1] FALSE

【讨论】:

  • 请注意:与?missing 一样,“missing(x) 仅在 x 自进入函数后未更改时才可靠”
【解决方案2】:
f <- function(a=2, b=3) {
  "b" %in% names(as.list(match.call()))
}

f()
#[1] FALSE
f(b=1)
#[1] TRUE

【讨论】:

    【解决方案3】:

    罗兰的回答更准确,但也许你要找的只是

    function(a=5) if( a !=5 ) print('hey, you changed a!') 
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2021-05-04
      • 2012-11-20
      • 2022-06-13
      相关资源
      最近更新 更多