我有一个函数f
,它有两个参数(p1
和p2
):
如果对于参数p2
没有将值传递给函数,则应使用p1
^ 2的值。但是,如果给出一个值,我怎样才能在函数中找到。问题是如果没有值,则不会初始化变量p2
。因此,我无法测试p2
NULL
。
f <- function(p1, p2) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
是否有可能检查p2
的值是否传递给函数? (我找不到isset()
- 函数或类似的东西。)
答案 0 :(得分:61)
您可以使用函数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()
进行技术操作,但是您也必须在missing()
中添加f.wrapper
语句。
答案 1 :(得分:7)
我认为'缺少'应该这样做。
答案 2 :(得分:5)
在这种情况下,您也可以使用以下内容:
f <- function(p1, p2 = p1 ^ 2) {
p1-p2
}
上有关延迟评估的部分