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

如何在R中传递NULL作为参数?,r,null,R,Null,我有一个向量参数,其中一些值是NA。我想将这些参数按顺序传递给如下函数: myFunction(argument = ifelse(!is.na(arguments[i]), arguments[i], NULL)) 因此,只要它不是NA,它就会接受arguments[i]中的值,否则会接受默认值NULL。但这会产生一个错误 如果有任何区别,则所讨论的函数是optmatch包中的match\u on()。所讨论的参数是卡钳,因为我只想在卡钳可用时提供一个卡钳(即当卡钳向量

我有一个向量
参数
,其中一些值是
NA
。我想将这些参数按顺序传递给如下函数:

myFunction(argument = ifelse(!is.na(arguments[i]),
           arguments[i], NULL))
因此,只要它不是
NA
,它就会接受
arguments[i]
中的值,否则会接受默认值
NULL
。但这会产生一个错误

如果有任何区别,则所讨论的函数是
optmatch
包中的
match\u on()
。所讨论的参数是
卡钳
,因为我只想在卡钳可用时提供一个卡钳(即当卡钳向量中的值不是
NA
)。错误信息如下:

Error in ans[!test & ok] <- rep(no,  length.out = length(ans))[!test &  : 
replacement has length zero
In addition: Warning message:
In rep(no, length.out = length(ans)) :'x' is NULL so the result will be NULL 
ans[!test&ok]中的
错误您可以使用
?switch()
而不是
ifelse
-

myFunction(argument = switch(is.na(arguments[i]) + 1, arguments[i], NULL))
这是
开关的帮助文档-

交换机(EXPR,…)

参数

表达式计算为数字或字符串的表达式

。。。备选方案清单。如果EXPR具有 这些将被命名的字符串值,可能除了一个 用作“默认”值的备选方案

详细信息

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

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


基本上,当参数为
NA
时,
EXPR
计算为2,返回
NULL
,当参数不是
NA
时,
EXPR
计算为1,返回
参数[i]

为什么在收到参数后不能在函数内部执行
NA
检查?NULL和NA是两个截然不同的东西。NULL是一种对象。另外,检查某物是否为NA的方法是使用
!is.na(参数)
。另外,“ifelse()”是矢量化的,所以我不知道为什么要使用索引。。ifelse是否在循环中?您需要提供更多的上下文。然而,在R中,从NA更改为NULL并不是真正有意义的事情。使用if和else。@VivekKalyanarangan我想我可以像你建议的那样修改
match_on()
的源代码,但我问是否有办法修复我的一行代码。@Elin我总是忘记
!是.na()
的东西,谢谢。是的,我们的想法是让这个函数在一个循环中,并让它依次处理
参数的值。我将编辑我的问题以反映这一点。