【问题标题】:R how to pass a (potentially) missing argument?R如何传递(可能)缺少的参数?
【发布时间】:2015-03-05 07:08:03
【问题描述】:

我在 R 中有一个使用 missing() 构造的低级函数,并且想使用一个向它传递一些参数的高级/包装器。

问题是即使用户没有在高层提供参数,低层函数也认为是给定的,见:

## low level:
foo_low <- function(x, argA, argB){
 if(+missing(argA)) warning("argA was given")
 if(+missing(argB)) warning("argB was given")
 x+1
}
## wrapper/high level:
foo_high <- function(x, argA, argB){
  foo_low(x=x, argA=argA, argB=argB)
} 

## issue: low level will considere non missing even if missing at high level:
foo_high(2)
[1] 3
Warning :
1: In foo_low(x = x, argA = argA, argB = argB) : argA was given
2: In foo_low(x = x, argA = argA, argB = argB) : argB was given

我怎样才能优雅地解决这个问题?我可以检查高级函数内部是否调用,然后进行单独调用,但不是很优雅。我也可以使用 ...,但在我的情况下不实用。还有其他建议吗?谢谢!!

【问题讨论】:

  • 这纯粹是一个R 问题,因此,它应该迁移到 StackOverflow。由于您已经分配了r 标签,因此该问题应该得到适当的关注。
  • 对不起!我该如何迁移到 StackOverflow?
  • 完全没问题。我已经将此问题标记为迁移到 SO,因此 CV 版主将提供帮助。我稍后会尝试回答这个问题,如果我记得我是如何使用missing() 的(虽然没有承诺:-)。目前无法集中注意力 - 有点晚了。

标签: r


【解决方案1】:

您必须在foo_low 中将+ 替换为!(逻辑),因为您想测试参数是否丢失。 p>

foo_low <- function(x, argA, argB){
  if(!missing(argA)) warning("argA was given")
  if(!missing(argB)) warning("argB was given")
  x+1
}

foo_high(2)
# [1] 3

【讨论】:

  • 哦,哇,这只是我的一个错误!所以它确实按预期工作,太棒了!谢谢!
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多