r - 识别 R 中的 if/else 语句并从中提取表达式
问题描述
我想expr_a, expr_b, expr_c
从以下函数中的 if/else 块中提取:
test <- function() {
result <- if (expr_a)
expr_b
else
expr_c
return(result)
}
出于消除死代码的目的(我已经看过该rco
库,但它目前不支持我正在使用的所有案例)。
我希望能够用expr_b
ifeval(expr_a) == TRUE
或expr_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)
# }
推荐阅读
- android - 如何编辑清单回收器项目以及新选择的项目
- android - 如何制作曲线工具栏和tablayout?
- node.js - express js API promise 同步问题
- firebase - Firebase 令牌 ID:通过 WorkManager Android 传递时
- html - 如何使多个 SVG 内联?
- php - MongoDB PECL 驱动程序和 Composer PHPLIB 之间的区别?
- python - 如何在散景图中旋转箭头标记以显示风速方向?
- java - RDDs如何为自己拆分数据?
- ruby-on-rails - 设置to_param方法后无法创建嵌套资源
- ios - 如何获取我的 iOS 应用程序的本地化语言?