如何在R中将NULL作为参数传递?

时间:2018-11-24 20:39:54

标签: r null

我有一个向量arguments,其中一些值为NA。我想将这些参数依次传递给这样的函数:

myFunction(argument = ifelse(!is.na(arguments[i]),
           arguments[i], NULL))

,以便在不为arguments[i]的情况下都将采用NA中的值,否则为默认值NULL。但这会产生错误。

如果有任何区别,则所讨论的函数是match_on()包中的optmatchcaliper中有问题的参数,因为我只想提供一个游标卡尺(即,游标卡的向量中的值不是NA时)。错误消息是这样的:

  

ans [!test&ok]中的错误<-rep(no,length.out = length(ans))[!test&:   替换的长度为零   另外:警告消息:   在rep(no,length.out = length(ans))中:'x'为NULL,因此结果为NULL

1 个答案:

答案 0 :(得分:1)

您可以使用?switch()代替ifelse-

myFunction(argument = switch(is.na(arguments[i]) + 1, arguments[i], NULL))

这是switch的帮助文档-

  

开关(EXPR,...)

     

参数

     

将表达式计算为数字或字符串。

     

...替代方案列表。如果打算让EXPR具有   这些将被命名的字符串值,也许除了一个   替代用作“默认”值。

     

详细信息

     

switch以两种不同的方式工作,具体取决于第一个参数   计算为字符串或数字。

     

如果EXPR的值不是字符串,则将其强制转换为   整数。如果整数介于1和nargs()-1之间,则   评估...的对应元素,并返回结果:   因此,如果第一个参数为3,则对第四个参数求值   然后返回

基本上,当参数为NA时,EXPR的结果为2,它返回NULL;当参数不是NA时,则EXPR的结果为1,然后返回arguments[i]