Я ищу способ программного анализа (и манипулирования) дерева вызовов вызовов функций, которые у меня есть в R-скриптах. Я узнал, что в пакете pryr есть функция pryr :: ast(), которая возвращает иерархическую древовидную структуру вызова. Я хочу что-то подобное, но, как я уже говорил, что нужно работать на строки ввода:Анализ дерева вызовов для вызова функций R в скриптах
В качестве примера рассмотрим содержание следующего примера файла input.R, который находится на моем жестком диске:
mean(sqrt(1:10 - 1), na.rm = T, trim = 0.1)
Задача состоит в том, чтобы прочитать input.R в R, а затем, по существу, пройти скрипт и собрать вызовы вложенных функций в какой-либо форме списка, например pryr печатает это:
\-()
\- `mean
\-()
\- `sqrt
\-()
\- `-
\-()
\- `:
\- 1
\- 10
\- 1
\- `T
\- 0.1
Есть некоторый элегантный способ сделать это, или я должен Ues некоторой формы регулярных выражений для идентификации вызовов?
Что вы ищете, это дерево разбора *, а не дерево вызовов. Дерево вызовов - это нечто другое (хотя и связанное). Кроме того, поскольку вы, очевидно, знаете о pryr, в чем именно вопрос? –
спасибо за исправление. – user3393472
На самом деле, я должен признать, что даже в учебном пособии Хэдли «Advanced R» это неправильно, и используется термин «дерево вызовов». И даже мой комментарий был несколько неправильным: общим термином является «синтаксическое дерево», из которых «дерево разбора» в значительной степени является синонимом, но это использование кажется странным вне контекста анализатора (чтобы проиллюстрировать это, результат «вызов» ('+', quote (a), 1) '- это синтаксическое дерево *, но поскольку оно не было * проанализировано *, скорее, оно было построено из вызовов функций - термин« дерево синтаксического анализа »был бы странным здесь). –