在R语言中,如何使用“null”作为函数参数的默认值?

12

这是我的当前代码:

my.function <- function( my.arg="" ){
  if(my.arg == "")
    my.arg <- rnorm(10)
  return( mean(my.arg) )
}

这会返回给我这个:

> my.function( rbinom(10, 100, 0.2) )
[1] 18.5
Warning message:
In if (a == "") a <- rnorm(10) :
  the condition has length > 1 and only the first element will be used

我尝试过使用my.arg=c()或者my.arg=0,但我总是得到警告或错误。而且R手册对这个问题没有很多解释。

有什么想法吗?提前感谢!


所以你想返回任意分布的平均值,如果你没有传入分布和适当的参数,你想返回 rnorm(10) 的平均值? - Chase
@Chase 是的,但那只是一个虚拟的例子,我的“真正”的函数更加复杂... Karsten 的解决方案可行。 - tflutre
你会从 my.function(NA) 中期望得到什么? - Henry
3个回答

23

尝试

my.function <- function( my.arg=NULL ){
 if(is.null(my.arg)) ...

11

还有一个missing

my.function <- function(my.arg) {
  if(missing(my.arg)) ...

3

Karsten的方法是正确的。警告的原因是你正在将my.arg与长度为1的字符向量""进行测试,因此当my.arg是长度>1的向量时会出现警告。 如果你真的想测试my.arg是否为"",你需要做类似以下的操作

if (length(my.arg) == 1 && my.arg == "")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接