我有一个向量arguments
,其中一些值为NA
。我想将这些参数依次传递给这样的函数:
myFunction(argument = ifelse(!is.na(arguments[i]),
arguments[i], NULL))
,以便在不为arguments[i]
的情况下都将采用NA
中的值,否则为默认值NULL
。但这会产生错误。
如果有任何区别,则所讨论的函数是match_on()
包中的optmatch
。 caliper
中有问题的参数,因为我只想提供一个游标卡尺(即,游标卡的向量中的值不是NA
时)。错误消息是这样的:
ans [!test&ok]中的错误<-rep(no,length.out = length(ans))[!test&: 替换的长度为零 另外:警告消息: 在rep(no,length.out = length(ans))中:'x'为NULL,因此结果为NULL
答案 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]
。