2012-05-31 20 views
5

available.packages()函數列出CRAN上可用的所有軟件包。是否有類似的功能來查找所有可用的小插曲?如果沒有,我將如何獲得所有短片及其相關軟件包的列表?可用CRAN小插曲

作爲要記住data.table包的一個角落案例,有3個與其相關聯的小插件。

編輯:每安德烈的迴應我意識到我不清楚。我知道關於查找所有可用的本地插圖的小插曲功能,我正在獲取CRAN上所有軟件包的所有小插件。

+1

你可以在CRAN上解析(比如用'XML'和'RCurl')所有包的索引,儘管我很確定系統管理員不會喜歡這個想法。 – daroczig

+0

我似乎回想起在回答某些SO問題(現在無法找到它)並且決定由於信息未包含在available.packages()的輸出中,也沒有包含在應用的結果中'readRDS' to'@ CRAN/web/packages/packages.rds'(來自Jeroen Ooms的一個小竅門),我想不出一種非刮擦的方式去做它... –

+0

這將是一個包的一部分,是爲CRAN設計的,所以一個抓取方法不是最好的方法,除非......我可以一次性抓取並將信息存儲爲包中的數據集,並隨每個新版本的包更新。也許有可能。 –

回答

5

我似乎記得在迴應一些問題,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

+0

我想我會用這個或者一個修改過的版本進行修改,並且將輸出作爲數據集包含在包中。謝謝,雖然我可能會放棄偉哥的廣告。 –

+0

我嘗試了上面的功能並遇到了問題。當你使用'paste0'時,我消除了',sep =「」'。但是當我嘗試運行v v部分時。它停在20%,並給我以下錯誤:'在讀取RDS(tmp.rds)中的錯誤:從連接讀取錯誤任何想法如何克服這一點?我究竟做錯了什麼? –

+1

不知道。也許有一個損壞的index.rds文件的地方?您可以在'readRDS'周圍放入另一個'try'語句以跳過它...因爲該函數使用'ldply',它無法訪問正在處理的當前包的名稱;它可能是值得吸引它,並使用'for'循環更大的透明度... –

2

函數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 
+1

謝謝Andrie,我實際上是在完成CRAN所提供的完整小插件列表之後,而不僅僅是本地安裝的軟件包。我認爲這可能比我希望的更難一些。 –