gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:37:52 26 4
gpt4 key购买 nike

我有描述数学公式的字符串,我想将其转换为有意义部分的列表。 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com