r - 如何在 R 中获取 AST 作为列表

标签 r list abstract-syntax-tree

我有描述数学公式的字符串,我想将其转换为有意义部分的列表。 ast_ 函数知道如何解析它,将其显示为抽象语法树,但不返回 AST。我正在寻找一个返回树的函数。

bb <- "(media.urin_A + media.urin_B)/2"
lazyeval::ast_(rlang::parse_expr(bb))
> lazyeval::ast_(rlang::parse_expr(bb))
┗ ()
 ┗ `/
 ┗ ()
  ┗ `(
  ┗ ()
   ┗ `+
   ┗ `media.urin_A
   ┗ `media.urin_B
 ┗  2 

最佳答案

您可以使用 as.list()purrr 中的 map_if 递归构造一个:

getAST <- function(ee) purrr::map_if(as.list(ee), is.call, getAST)

# Example usage on expressions:
getAST( quote(log10(a+5)/b) )
# List of 3
#  $ : symbol /
#  $ :List of 2
#   ..$ : symbol log10
#   ..$ :List of 3
#   .. ..$ : symbol +
#   .. ..$ : symbol a
#   .. ..$ : num 5
#  $ : symbol b

# Example usage on strings:
getAST( str2lang("(media.urin_A + media.urin_B)/2") )
# List of 3
#  $ : symbol /
#  $ :List of 2
#   ..$ : symbol (
#   ..$ :List of 3
#   .. ..$ : symbol +
#   .. ..$ : symbol media.urin_A
#   .. ..$ : symbol media.urin_B
#  $ : num 2

关于r - 如何在 R 中获取 AST 作为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083614/

相关文章:

c# - 将新项目添加到列表后,ListView 未更新

java - 将 ArrayList<ArrayList<Integer>> 转换为 List<List<Integer>>

parsing - ANTLR规则重写为嵌套树

ruby - 从 Ruby block 中提取 AST

r - 使用非 GPL 代码分发 GPL 代码

r - 如何在RStudio中进行多选编辑?

python - 计算排列列表中的周期

Clang AST 解释

r - 在来自不同组的两个点之间画一条线,同时跟踪这些点

r - 有没有办法在ggplot中将x轴设置为最小值和最大值?