R_U*_*ser 53 variables r function variable-assignment isset
我有一个f
带两个参数(p1
和p2
)的函数:
如果对于参数p2
没有将值传递给函数,p1
则应使用^ 2 的值.但是,如果给出一个值,我怎样才能在函数中找到.问题是p2
如果没有值,则不会初始化变量.因此我无法测试p2
存在NULL
.
f <- function(p1, p2) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
Run Code Online (Sandbox Code Playgroud)
是否有可能检查是否将值p2
传递给函数?(我找不到isset()
- 功能或类似的东西.)
Jor*_*eys 69
你使用这个功能missing()
.
f <- function(p1, p2) {
if(missing(p2)) {
p2=p1^2
}
p1-p2
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以将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
Run Code Online (Sandbox Code Playgroud)
编辑:你也可以在技术上这样做missing()
,但是你也必须包括一个missing()
声明f.wrapper
.
在这种情况下你也可以使用这样的东西:
f <- function(p1, p2 = p1 ^ 2) {
p1-p2
}
Run Code Online (Sandbox Code Playgroud)
请参阅http://adv-r.had.co.nz/Functions.html上关于懒惰评估的部分
归档时间: |
|
查看次数: |
14611 次 |
最近记录: |