有available.packages()
函數列出CRAN上可用的所有軟件包。是否有類似的功能來查找所有可用的小插曲?如果沒有,我將如何獲得所有短片及其相關軟件包的列表?可用CRAN小插曲
作爲要記住data.table
包的一個角落案例,有3個與其相關聯的小插件。
編輯:每安德烈的迴應我意識到我不清楚。我知道關於查找所有可用的本地插圖的小插曲功能,我正在獲取CRAN上所有軟件包的所有小插件。
有available.packages()
函數列出CRAN上可用的所有軟件包。是否有類似的功能來查找所有可用的小插曲?如果沒有,我將如何獲得所有短片及其相關軟件包的列表?可用CRAN小插曲
作爲要記住data.table
包的一個角落案例,有3個與其相關聯的小插件。
編輯:每安德烈的迴應我意識到我不清楚。我知道關於查找所有可用的本地插圖的小插曲功能,我正在獲取CRAN上所有軟件包的所有小插件。
我似乎記得在迴應一些問題,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表格,鏈接,全世界都可以使用(然後將偉哥廣告添加到頁面,並且$$ PROFIT $$ ...)
編輯:將下載和readRDS包裝在函數中,所以我可以將所有東西包裝在try
我想我會用這個或者一個修改過的版本進行修改,並且將輸出作爲數據集包含在包中。謝謝,雖然我可能會放棄偉哥的廣告。 –
我嘗試了上面的功能並遇到了問題。當你使用'paste0'時,我消除了',sep =「」'。但是當我嘗試運行v v部分時。它停在20%,並給我以下錯誤:'在讀取RDS(tmp.rds)中的錯誤:從連接讀取錯誤任何想法如何克服這一點?我究竟做錯了什麼? –
不知道。也許有一個損壞的index.rds文件的地方?您可以在'readRDS'周圍放入另一個'try'語句以跳過它...因爲該函數使用'ldply',它無法訪問正在處理的當前包的名稱;它可能是值得吸引它,並使用'for'循環更大的透明度... –
函數vignette()
和browseVignettes()
列出了機器上安裝的所有軟件包的縮略圖。
vignette(package="data.table")
Vignettes in package ‘data.table’:
datatable-faq Frequently asked questions (source, pdf)
datatable-intro Quick introduction (source, pdf)
datatable-timings Timings of common tasks (source, pdf)
browseVignettes()
是特別有用的,因爲它創建了一個網頁的超鏈接:
browseVignettes(package="data.table")
Vignettes found by browseVignettes(package = "data.table")
Vignettes in package data.table
Frequently asked questions - PDF R LaTeX/noweb
Quick introduction - PDF R LaTeX/noweb
Timings of common tasks - PDF R LaTeX/noweb
謝謝Andrie,我實際上是在完成CRAN所提供的完整小插件列表之後,而不僅僅是本地安裝的軟件包。我認爲這可能比我希望的更難一些。 –
你可以在CRAN上解析(比如用'XML'和'RCurl')所有包的索引,儘管我很確定系統管理員不會喜歡這個想法。 – daroczig
我似乎回想起在回答某些SO問題(現在無法找到它)並且決定由於信息未包含在available.packages()的輸出中,也沒有包含在應用的結果中'readRDS' to'@ CRAN/web/packages/packages.rds'(來自Jeroen Ooms的一個小竅門),我想不出一種非刮擦的方式去做它... –
這將是一個包的一部分,是爲CRAN設計的,所以一個抓取方法不是最好的方法,除非......我可以一次性抓取並將信息存儲爲包中的數據集,並隨每個新版本的包更新。也許有可能。 –