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

Identifying if/else statements in R and extracting expressions from them

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

test <- function() {

    result <- if (expr_a)
                  expr_b
              else
                  expr_c

    return(result)
}

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

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

基于正则表达式的方法解决这个问题的问题是,这个问题有太多可能的变体,我不确定如何捕捉所有变体。例如,上面的代码是一行表达式的有效 R 代码。括号内的多行表达式也可以写成例如:

else
{
    # ...
}

有没有什么方法可以在 R 中以编程方式识别和捕获每个可能的 if/else 语句?


我的真实起点的示例:


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)
# }