R:当参数为factor时,如何将函数参数default定义为NULL

时间:2015-12-04 08:31:45

标签: r function arguments parameter-passing

我试图将参数传递给作为因子数据类型的函数,同时将默认值定义为NULL。简化示例如下:

my_function <-  function(my_arg = c(NULL,"this","that")){
    Do stuff here...
}

这似乎不起作用,就好像我按如下方式定义函数:

my_function <-  function(my_arg = c(NULL,"this","that")){
    print(my_arg)
} 

结果是:

> my_function()

[1]“this”“that”

不确定如何将参数作为定义的默认值为NULL的因子传递。谢谢!

编辑:

感谢您的回复,但这些并没有真正回答我的问题。也许我不够具体。我的例子是我实际想要完成的一个高度简化的例子,但我需要的是指定一个可以采用三个值之一的参数 - “this”,“that”和NULL。除此之外,我需要将默认值设置为NULL。我可以简单地设置my_arg = NULL,但是我没有在函数签名中指定我的arg必须是这三个选项之一。你的解决方案对我来说都不是这些。如果我作为列表传递,请说

my_function <-  function(my_arg = list(NULL,"this","that")){
  print(my_arg)
}

这导致以下结果:

> my_function("this")
[1] "this"
> my_function("asdf")
[1] "asdf"
> my_function()
[[1]]
NULL

[[2]]
[1] "this"

[[3]]
[1] "that"

因此,如果我没有特别向my_args传递值,它将使用签名中列出的每个值迭代该函数。我需要的是函数接受NULL,“this”或“that”作为参数的值,而如果没有传递则将NULL设置为默认值。

2 个答案:

答案 0 :(得分:1)

向量不能包含NULL。你需要一个清单:

c(NULL,"this","that")
#[1] "this" "that"
list(NULL,"this","that")
#[[1]]
#NULL
#
#[[2]]
#[1] "this"
#
#[[3]]
#[1] "that"

正如文件所说:

  

NULL表示R

中的空对象

语言定义进一步解释:

  

2.1.6 NULL

     

有一个名为NULL的特殊对象。它只在有的时候使用   需要指出或指定一个对象不存在。它不应该   与矢量或零长度列表混淆。

     

NULL对象没有类型,也没有可修改的属性。有   R中只有一个NULL对象,所有实例都引用该对象。为了测试   NULL使用is.null。您无法在NULL上设置属性。

向量只能包含一种类型的值,因为NULL没有类型,所以它不能在向量中。将NULL分配给具有<-的子集会删除子集,而c将忽略NULL

答案 1 :(得分:0)

您可以单独指定参数:

my_function <-  function(my_arg1 = NULL, my_arg2="this", my_arg3="that"){
    print(is.null(my_arg1))
} 
#> my_function()
#[1] TRUE

或者,正如@Roland所指出的,您可以将它们作为列表传递:

my_function <-  function(my_arg = list(NULL,"this","that")){
     print(is.null(my_arg[[1]]))
} 
#> my_function()
#[1] TRUE