Как я могу перечислить пакеты, не включенные ни в одно представление R? - PullRequest
4 голосов
/ 01 сентября 2011

В последнее время я много раз просматривал R Task Views и обнаружил, что некоторые интересные пакеты не включены ни в какие представления задач.Есть ли установленный способ найти дополнение пакетов, перечисленных в представлениях задач?

Я понимаю, что через XML и обработку файлов ctv (например, http://cran.r -проект.org / web / views / Econometrics.ctv ), я могу найти объединение всех пакетов, перечисленных в узле <packagelist>, и что available.packages() может перечислить все доступные пакеты для загрузки.Это уловка, или я упускаю какую-то хитрость при использовании сайта, подобного CRANberries или CRANtastic ?

Обновление 1 (не делайте этого - см. Мой ответниже): я упустил упоминание, что CRAN перечисляет "In views:" для пакетов.Таким образом, кажется, что за кулисами хранится некоторая информация, сопоставляющая пакеты с представлениями, в которых они находятся. Можно легко (и грубо) очистить все страницы пакета CRAN и выполнить команду «В представлениях:».Это была моя первоначальная идея, пока я не наткнулся на ctv, что немного элегантнее.

Обновление 2: я упустил ссылку на ctv .Документация к пакету интересна, если вы находитесь в представлении задач.

Ответы [ 2 ]

6 голосов
/ 01 сентября 2011

Я должен был прочитать документацию ctv более внимательно.Ответ был тут же: есть файл .rds с именем Views.rds.Вот пошаговый метод:

myRepos         <- "http://cran.r-project.org"
tmpfile         <- tempfile()
download.file(paste(myRepos, "src/contrib/Views.rds", sep = "/"), destfile = tmpfile)

myViews         <- .readRDS(tmpfile)
func_listPkgs   <- function(x){return(x$packagelist$name)}
aggRaw          <- lapply(myViews, func_listPkgs)
aggInViews      <- unique(unlist(aggRaw))

availRaw        <- available.packages(contriburl = paste(myRepos, "src/contrib", sep = "/"))
availPkgs       <- rownames(availRaw)
notInViews      <- setdiff(availPkgs, aggInViews)

Вот что он делает:

  1. Он получает файл Views.rds из зеркала CRAN.
  2. Загружает Views.rds в фрейм данных.Примечание: до 2.13 нужно было использовать .readRDS, который теперь readRDS с 2.13..readRDS все еще работает, хотя и устарел.
  3. Получает список доступных пакетов.Это можно сделать более прямо: есть файл с именем Packages.gz, который можно загрузить, но затем мы должны его проанализировать.Давайте придерживаться уже доступных инструментов.:)
  4. Он запускает diff для двух списков.Для развлечения попробуйте противоположный diff: oddPackages <- setdiff(aggInViews, availPkgs).Некоторые из них - пакеты в базе R. Другие - ???кто знает.
6 голосов
/ 01 сентября 2011

Никаких скрытых трюков, просто заново создайте что-то вроде CRANberries (которое начинается с вызова available.packages() и сравнения с данными состояния, которые хранятся в локальной базе данных).

В вашем случае вы можете захотеть вычислитьустановите различия между тем, что available.packages() получает вас, и тем, что вы получаете из пакета ctv относительно выбора вида задачи.

Редактировать 1 Ваша идея «Обновления 1» является грубой.Слишком грубо.Мета-информация в CRAN поступает из метаки, должным образом учитывает метаинформацию: первый набор - это все пакеты, наборы добавления для каждого представления задач, которые могут быть разделены между «перечисленными» и «рекомендованными» и объединены.

Edit 2 Я думаю, что вы просто используете код из ctv для разбора его файлов, выходов и наборов.Мы использовали это в cran2deb, чтобы определить меньшие тестовые наборы для создания пакета.Учитывая этот набор (и другие данные), они могут генерировать веб-страницы.Я думаю, что вы можете усложнять вещи.R делает это возможным, поскольку я также знаю, что чертовски хорошо; -)

...