测试是不是在 R 中设置了函数的参数
Posted
技术标签:
【中文标题】测试是不是在 R 中设置了函数的参数【英文标题】:Test if an argument of a function is set or not in R测试是否在 R 中设置了函数的参数 【发布时间】:2011-12-19 08:57:21 【问题描述】:我有一个函数f
,它接受两个参数(p1
和p2
):
如果参数p2
没有值传递给函数,则应使用p1
^2 的值。但是我如何在函数中找出是否给出了一个值。问题是如果没有值,变量p2
不会被初始化。因此我无法测试p2
是否为NULL
。
f <- function(p1, p2)
if(is.null(p2))
p2=p1^2
p1-p2
是否有可能检查p2
的值是否已传递给函数? (我找不到isset()
- 函数或类似的东西。)
【问题讨论】:
【参考方案1】:为此,您使用函数missing()
。
f <- function(p1, p2)
if(missing(p2))
p2=p1^2
p1-p2
或者,您可以将 p2 的值默认设置为 NULL。我有时更喜欢这种解决方案,因为它允许将参数传递给嵌套函数。
f <- function(p1, p2=NULL)
if(is.null(p2))
p2=p1^2
p1-p2
f.wrapper <-function(p1,p2=NULL)
p1 <- 2*p1
f(p1,p2)
> f.wrapper(1)
[1] -2
> f.wrapper(1,3)
[1] -1
编辑:从技术上讲,您也可以使用 missing()
执行此操作,但是您还必须在 f.wrapper
中包含 missing()
语句。
【讨论】:
+1 表示NULL
默认选项。回复:您添加的编辑,您将如何通过包装函数传递missing
'ness?
@JoshO'Brien 传递 missing
-ness 是复杂的 AFAIK - 但可能。这就是为什么NULL
在这种情况下要容易得多。
...所以可能需要一个单独的问题来传递missing
-ness。
@JoshO'Brien 那一定是if(missing(p2)) f(p1) else f(p1,p2)
。或者您可以使用点参数传递参数。
谢谢。 FWIW,如果两个函数都有正式的参数p1
和p2
,我看不出如何用点来做到这一点。另一种选择在f.wrapper()
的正文中使用以下内容:cl <- match.call(); cl$p1 <- 2*p1; cl[[1]] <- f; eval(cl)
。所有这一切都表明您的NULL
替代品确实有多清洁!【参考方案2】:
我认为'?missing'应该这样做。
【讨论】:
【参考方案3】:在这种情况下,你也可以使用这样的东西:
f <- function(p1, p2 = p1 ^ 2)
p1-p2
在http://adv-r.had.co.nz/Functions.html查看懒惰评估部分
【讨论】:
我一般是这样写的,那么missing
什么时候最合适呢?以上是关于测试是不是在 R 中设置了函数的参数的主要内容,如果未能解决你的问题,请参考以下文章
delphi:dbgrideh中设置了checkbox列,不能勾选