R语言如何实现可识别sys.call返回的symbol类型T的真值判断函数
方案1:直接对symbol求值(最简写法)
直接对call中保存的参数执行求值操作,即可将symbol类型的T转换为对应的逻辑值,搭配原生isTRUE()使用即可:
isTRUE(eval(main_example$match_call$mc)) # 返回 TRUE isTRUE(eval(main_example$sys_call$mc)) # 返回 TRUE
该方案完全遵循R的环境规则,若用户在当前环境中自行修改了T的赋值,会按实际赋值结果判断,符合常规代码执行逻辑。
方案2:自定义判断函数(强兼容性,无求值开销)
如果希望无论用户是否修改T的默认值,都将输入的T识别为逻辑真值,可将判断逻辑封装为复用函数:
is_true_call_param <- function(x) { isTRUE(x) || (is.symbol(x) && identical(x, as.symbol("T"))) }
调用示例:
is_true_call_param(main_example$match_call$mc) # 返回 TRUE is_true_call_param(TRUE) # 返回 TRUE is_true_call_param(FALSE) # 返回 FALSE is_true_call_param(as.symbol("F")) # 返回 FALSE
如果需要兼容假值判断,可同理实现假值判断函数:
is_false_call_param <- function(x) { isFALSE(x) || (is.symbol(x) && identical(x, as.symbol("F"))) }
包开发时可以直接把这两个工具函数放到内部工具文件中,全局调用即可,比重复写判断逻辑简洁很多。
内容的提问来源于stack exchange,提问作者Moritz Schwarz
相关产品推荐
相关产品推荐

