识别R中的if/else语句并从中提取表达式



我想从以下函数中的if/else块中提取expr_a, expr_b, expr_c:

test <- function() {
result <- if (expr_a)
expr_b
else
expr_c
return(result)
}

用于消除死代码(我看过rco库,但它目前不支持我正在使用的所有情况)。

如果eval(expr_a) == TRUEexpr_c否则,我希望能够用expr_b替换整个循环。

基于正则表达式的方法解决这个问题的问题是,在这个问题上有很多可能的变化,我不确定如何捕获它们。例如,上面的代码是单行表达式的有效R代码。用括号括起来的多行表达式也可以写成:

else
{
# ...
}

是否有任何方法来识别和捕获每一个可能的if/else语句在R编程?


我真正的起点是什么样子的一个例子:


test <- function() {
my_var <- list(my_bool = FALSE)
my_result <- if(my_var$my_bool) 1
else my_var$my_bool + 2
return(my_result)
}

理想的输出是:list(expression(my_var$my_bool), expression(1), expression(my_var$my_bool + 2))

明白了!as.list可用于将调用分解到语法树中。

例如:


example <- quote(
if (object) {
print(result_true)
} else {
print(result_false)
}
)
as.list(example)
# [[1]]
# `if`
# 
# [[2]]
# object
# 
# [[3]]
# {
#     print(result_true)
# }
# 
# [[4]]
# {
#     print(result_false)
# }

相关内容

  • 没有找到相关文章

最新更新