Ссылки на исходный код (srcref) для загруженных пакетов и объектов в рабочей области - PullRequest
1 голос
/ 29 апреля 2020

Я хочу получить "список" для

  • всех загруженных пакетов и
  • всех объектов в рабочей области

вместе с информацией, если исходный код доступен для этих пакетов / объектов (атрибут srcref).

Как я могу это сделать (в основном, как ссылки на исходный код работают с пакетами, действительно ли мне нужно «сканировать» атрибуты каждого объект в пакете)?

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

Ожидаемый результат:

Например. data.frame с этими столбцами:

  1. Имя пакета (пустое или «глобальное» для объектов рабочей области)
  2. Имя объекта (может быть пустым, если нет необходимости проверять все объекты пакета)
  3. Has_source_references (логическое значение)

Пока мой код (частично основанный на комментарии @mnist - TXH!):

objs <- lapply(search(), function(p) {
                            print(p)
                            objs <- ls(p)
                            res <- if (length(objs) > 0 & !(p %in% c("package:base"))) data.frame(objs = objs, pkg = sub("package:", "", p), stringsAsFactors = F) else data.frame(objs = character(0), pkg = character(0))
                            return(res)
                          } )
all.objs <- do.call(rbind, objs)
# This does not work: I try to get the srcref of every object. No srcref means no source code
all.objs$srcref <- attr(mget(all.objs$objs, inherits = T), "srcref")

srcref ссылки:

...