作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有描述数学公式的字符串,我想将其转换为有意义部分的列表。 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/
我是一名优秀的程序员,十分优秀!