available.packages()
いくつかのSOの質問に答えてこれを見て(今は見つけられません)、情報がの出力にも適用の結果にも含まれていないため、それを決定したことを思い出したようですreadRDS
(@CRAN/web/packages/packages.rds
Jeroen Oomsのトリック) 、それを行うための非スクレイピング方法は考えられませんでした...
これが私のスクレーパーで、最初の 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")])
これをクリーンアップ/よりコンパクトにする方法があるかもしれませんが、うまくいくようです。1回スクレイプ/時々更新する戦略は合理的です。または、毎日(または毎週または妥当と思われるもの)スクレイピングし、結果を一般にアクセス可能な場所に保存/投稿したい場合は、その URL をパッケージにハードコーディングした関数を含めます...または適切にフォーマットされた HTML テーブルを作成することさえできます、全世界が使用できるリンク付き (そして、バイアグラ広告をページに追加し、$$PROFIT$$ ...)
edit : ダウンロードと readRDS の両方を関数にラップしたので、全体をtry