测试是不是在 R 中设置了函数的参数

Posted

技术标签:

【中文标题】测试是不是在 R 中设置了函数的参数【英文标题】:Test if an argument of a function is set or not in R测试是否在 R 中设置了函数的参数 【发布时间】:2011-12-19 08:57:21 【问题描述】:

我有一个函数f,它接受两个参数(p1p2):

如果参数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,如果两个函数都有正式的参数p1p2,我看不出如何用点来做到这一点。另一种选择在f.wrapper() 的正文中使用以下内容:cl &lt;- match.call(); cl$p1 &lt;- 2*p1; cl[[1]] &lt;- 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 中设置了函数的参数的主要内容,如果未能解决你的问题,请参考以下文章

R语言笔记 R中设置图形参数--函数par()详解

delphi:dbgrideh中设置了checkbox列,不能勾选

如何检查是不是从脚本中设置了 python 调试选项

在一个模拟的类中设置了一个属性

Android ems属性设置后没效果,edittext中设置了ems 10,输入时还是能输入无限

如何检测何时在 Android 中设置了新警报