Выявление зависимостей функций и сценариев R

Я просматриваю пакет и сценарии, использующие этот пакет, и хотел бы определить внешние зависимости. Цель состоит в том, чтобы изменить сценарии для указания библиотеки (pkgName) и изменить функции в пакете для использования require (pkgName) , чтобы эти зависимости стали более очевидными позже.

Я изменяю код, чтобы учесть каждый внешне зависимый пакет. В качестве примера, хотя он ни в коем случае не является окончательным, сейчас мне трудно идентифицировать код, который зависит от data.table . Я мог бы заменить data.table на Matrix , ggplot2 , bigmemory , plyr или многие другие пакеты, так что не стесняйтесь отвечать с примерами, основанными на других пакетах.

Этот поиск не очень простой. Подходы, которые я пробовал до сих пор, включают:

  • Поиск кода для библиотеки и require операторов
  • Поиск упоминаний data.table (например, библиотека (data.table) )
  • Попробуйте запустить codetools :: checkUsage , чтобы определить, где могут быть проблемы. Что касается сценариев, моя программа вставляет сценарий в локальную функцию и применяет к ней checkUsage .В противном случае я использую checkUsagePackage для пакета.
  • Ищите инструкции, которые несколько уникальны для data.table , например : = .
  • Ищите, где классы объектов могут быть идентифицированы с помощью венгерской нотации, например DT

Суть моего поиска заключается в том, чтобы найти:

  • загрузка data.table ,
  • объектов с именами, указывающими на то, что они являются объектами data.table ,
  • методами, которые кажутся data.table -специфичными

найти, где загружен пакет. К сожалению, не все функции могут явно загружать или требовать внешний пакет - они могут предполагать, что он уже загружен. Это плохая практика, и я пытаюсь ее исправить. Однако поиск предметов и методов кажется сложной задачей.

Этот ( data.table ) - всего лишь один пакет, и один с тем, что кажется ограниченным и несколько уникальным. Предположим, я хотел найти варианты использования функций ggplot, где параметры более обширны, а текст синтаксиса не столь своеобразен (т.е. частое использование + не является идиосинкразическим, а : = вроде бы).

Я не думаю, что статический анализ даст точный ответ, например можно передать аргумент функции, который определяет загружаемый пакет.Тем не менее: есть ли какие-либо основные инструменты или пакеты, которые могут улучшить этот метод грубой силы с помощью статического или динамического анализа?

Как бы то ни было, tools :: pkgDepends адресует зависимости только на уровне пакета а не на уровне функции или сценария, на котором я работаю.


Обновление 1. Примером инструмента динамического анализа, который должен работать, является тот, который сообщает, какие пакеты загружаются во время выполнения кода. Я не знаю, существует ли такая возможность в R - это было бы похоже на Rprof , сообщающее о выходе search () вместо стека кода.

24
задан Iterator 8 January 2012 в 20:11
поделиться