我有一个向量arguments
,其中一些值是NA
。我想依次将这些参数传递给这样的函数:
myFunction(argument = ifelse(!is.na(arguments[i]),
arguments[i], NULL))
使得无论何时它不是NA
,它都将取arguments[i]
中的值,否则取默认的NULL
。但这会产生一个错误。
如果有任何不同,则所讨论的函数是optmatch
包中的match_on()
。有问题的论点是caliper
,因为我只想在有卡尺可用时(即,当卡尺向量中的值不是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
您可以使用?switch()
而不是ifelse
-
myFunction(argument = switch(is.na(arguments[i]) + 1, arguments[i], NULL))
这是switch
-的帮助文档
开关(EXPR,…(
参数
EXPR计算为数字或字符串的表达式。
备选方案列表。如果EXPR有字符串值这些将被命名,可能除了一个备用项用作"默认"值。
详细信息
开关有两种不同的工作方式,取决于第一个参数是否计算为字符串或数字。
如果EXPR的值不是字符串,它将被强制为整数如果整数介于1和nargs((-1之间,则…的相应元素。。。评估并返回结果:因此,如果第一个自变量为3,则评估第四个自变量并返回
基本上,当参数为NA
时,EXPR
的求值结果为2,返回NULL
;当参数不是NA
时,则EXPR
的求值结果是1,返回arguments[i]
。