簡體   English   中英

R:當參數為因數時,如何定義函數參數默認為NULL

[英]R: How do I define function argument default as NULL when argument is factor

我試圖在將默認值定義為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]“這個”“那個”

不確定如何將參數作為已定義默認值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設置為默認值。

向量不能包含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對象沒有類型,也沒有可修改的屬性。 R中只有一個NULL對象,所有實例都引用該對象。 要測試NULL,請使用is.null。 您不能將屬性設置為NULL。

向量只能包含一種類型的值,並且由於NULL沒有類型,因此它不能在向量中。 <-為子集分配NULL會刪除該子集,而c只會忽略NULL

您可以單獨指定參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM