我想从以下函数中的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) == TRUE
或expr_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)
# }