Я припоминаю, глядя на это в ответ на какой-то вопрос SO (не могу найти его сейчас) и решения что, поскольку информация не включена в выход available.packages()
, а также в результате применения readRDS
- @CRAN/web/packages/packages.rds
(трюк от Jeroen Ooms), я не мог придумать способ, который можно было бы сделать без царапин ...
H ERE в мой скребок, применяется к первым 100 пакетов (ведущие к 44 виньеток)
pkgs <- unname(available.packages()[, 1])[1:100]
vindex_urls <- paste0(getOption("repos"),"/web/packages/", pkgs,
"/vignettes/index.rds", sep = "")
getf <- function(x) {
## I think there should be a way to do this directly
## with readRDS(url(...)) but I can't get it to work
suppressWarnings(
download.file(x,"tmp.rds",quiet=TRUE))
readRDS("tmp.rds")
}
library(plyr)
vv <- ldply(vindex_urls,
.progress="text",
function(x) {
if (inherits(z <- try(getf(x),silent=TRUE),
"try-error")) NULL else z
})
tmpf <- function(x,n) { if (is.null(x)) NULL else
data.frame(pkg=n,x) }
vframe <- do.call(rbind,mapply(tmpf,vv,pkgs))
rownames(vframe) <- NULL
head(vframe[,c("pkg","Title")])
Там могут быть способы приберёмся/сделать его более компактным, но это, кажется, работает нормально. Ваша царапающая некогда/обновленная иногда стратегия кажется разумной. Или если вы хотите, чтобы вы могли ежедневно царапаться (или еженедельно или что-то вроде разумного) и сохранять/публиковать результаты где-то общедоступным, тогда включить функцию с этим URL-адресом, жестко закодированную в пакете ... или даже создать красиво отформатированную HTML-таблицу , со связями, что весь мир мог бы использовать (а затем добавить Виагры объявления на странице, а $$ ПРИБЫЛЬ $$ ...)
редактировать: обернуты как скачать и readRDS в функции, так Я могу обернуть все это в try
Вы можете разобрать (например, с 'XML' и' RCurl') все индексы пакета на CRAN, хотя я уверен, что системные администраторы не любят эту идею. – daroczig
Кажется, я вспоминаю об этом в ответ на какой-то вопрос SO (не могу найти его сейчас) и решив, что, поскольку информация не включена в вывод 'available.packages()', а также в результате применения 'readRDS' в' @ CRAN/web/packages/packages.rds' (трюк от Jeroen Ooms), я не мог думать о том, как это сделать ... –
Это будет часть пакета, который предназначен для CRAN, поэтому метод скремблирования - это не лучший подход, если ... Я мог бы очистить один раз и сохранить информацию в виде набора данных в пакете, который обновляется с каждой новой версией пакета. Возможно, возможно. –