我试图将参数传递给作为因子数据类型的函数,同时将默认值定义为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设置为默认值。
答案 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