gpt4 book ai didi

r - 分析脚本中 R 函数调用的调用树

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

我正在寻找一种方法来以编程方式分析(和操作)我在 R 脚本中的函数调用的调用树。我了解到在 pryr 包中,有一个函数 pryr::ast() 返回调用的层次树结构。我想要类似的东西,但正如我提到的,它需要处理字符串输入:

例如,考虑以下示例文件 的内容输入.R 这是在我的硬盘上:

mean(sqrt(1:10 - 1), na.rm = T, trim = 0.1)

任务是阅读 输入.R 进入 R,然后,基本上,遍历脚本并以某种列表形式收集嵌套的函数调用,例如pyr 打印:
\- ()
\- `mean
\- ()
\- `sqrt
\- ()
\- `-
\- ()
\- `:
\- 1
\- 10
\- 1
\- `T
\- 0.1

是否有一些优雅的方法可以做到这一点,或者我是否必须使用某种形式的正则表达式来识别调用?

最佳答案

请尝试以下操作:

  • 使用 parse(text = ...)将您的字符串转换为表达式
  • 使用 call_tree()来自包裹pryr构建调用树
  • 使用 capture.outputstdout 获取结果进入列表

  • 例如:
    library(pryr)
    f <- "mean(sqrt(1:10 - 1), na.rm = T, trim = 0.1)"
    x <- capture.output(call_tree(parse(text=f)))

    你的结果是一个字符向量(即列表)
    x
    [1] "\\- ()" " \\- `mean" " \\- ()" " \\- `sqrt" " \\- ()"
    [6] " \\- `-" " \\- ()" " \\- `:" " \\- 1" " \\- 10"
    [11] " \\- 1" " \\- `T" " \\- 0.1 "

    str(x)
    chr [1:13] "\\- ()" " \\- `mean" " \\- ()" " \\- `sqrt" " \\- ()" ...

    cat(x, sep="\n")
    \- ()
    \- `mean
    \- ()
    \- `sqrt
    \- ()
    \- `-
    \- ()
    \- `:
    \- 1
    \- 10
    \- 1
    \- `T
    \- 0.1

    关于r - 分析脚本中 R 函数调用的调用树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27964917/

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