如何在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()
的东西,谢谢。是的,我们的想法是让这个函数在一个循环中,并让它依次处理参数的值。我将编辑我的问题以反映这一点。