Я просматриваю пакет и сценарии, использующие этот пакет, и хотел бы определить внешние зависимости. Цель состоит в том, чтобы изменить сценарии для указания библиотеки (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 ()
вместо стека кода.