2012-05-31 6 views
5

CRAN에서 사용할 수있는 모든 패키지를 나열하는 기능은 available.packages()입니다. 사용 가능한 모든 비네트를 찾을 수있는 유사한 기능이 있습니까? 어떻게하면 모든 비 네트와 관련 패키지 목록을 얻을 수 있습니까?사용 가능한 CRAN 짤막음

data.table 패키지에는 연결된 3 개의 비네팅이 있습니다.

EDIT : Per Andrie의 답변 나는 분명치 않다는 것을 알고 있습니다. 사용할 수있는 모든 로컬 비 네트를 찾는 비 네트 기능에 대해 알고 있습니다. CRAN에서 모든 패키지의 모든 비 네트 (vignettes)를 얻는 방법을 알고 있습니다.

+1

시스템 관리자가이 아이디어를 좋아하지 않을 수도 있지만 CRAN의 모든 패키지 색인을 구문 분석 할 수 있습니다 (예 :'XML' 및'RCurl'). – daroczig

+0

필자는이 질문에 대한 답변으로 이것을보고 (정보를 찾을 수 없음) 정보가'available.packages()'의 결과에 포함되지 않았거나 적용 결과에 포함되어 있지 않기 때문에 'readRDS'를'@ CRAN/web/packages/packages.rds' (Jeroen Ooms의 속임수)로 바꾼다면, 나는 긁어 모으지 않는 방법을 생각할 수 없었습니다 ... –

+0

이것은 패키지의 일부일 것입니다. CRAN을위한 것입니다. 근근이 살아가는 방법은 최선의 방법이 아닙니다. 한 번 긁어 내서 패키지의 새로운 버전으로 업데이트되는 패키지의 데이터 세트로 정보를 저장합니다. 아마 가능성. –

답변

5

가 좀 SO 질문에 대한 응답이보고 기억하는 것을 (지금을 찾을 수 없습니다) 및 결정 정보가 available.packages()의 출력이나 readRDS에서 @CRAN/web/packages/packages.rds (Jeroen Ooms의 트릭)을 적용한 결과에 포함되지 않았기 때문에 나는 그걸하는 비 긁적 인 방법을 생각할 수 없었습니다.

H (44 개 네트에 이르는) 처음 100 개 패키지에 적용 조립식의 내 스크레이퍼,

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 표를 만들 수도 있습니다. , 그리고 전세계가 사용할 수있는 링크 (그리고 나서 페이지에 Viagra 광고를 추가하고 $$ PROFIT $$ ...)

편집 : 다운로드 및 readRDS 기능을 모두 포함하므로 모든 것을 포장 할 수 있습니다. try

+0

필자는이 버전이나 수정 된 버전으로 긁어 모으고 패키지의 데이터 세트로 출력을 포함시킬 것이라고 생각합니다. 아마 비아그라 광고를 잊어 버려서 고맙습니다. –

+0

위의 함수를 사용해 보았는데 문제가 발생했습니다. 나는'paste0'를 사용하면서', sep = ""'를 제거했습니다. 그러나 v v 부분을 실행하려고 할 때.20 %에서 멈추고 다음과 같은 오류가 발생합니다 :'readRDS (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이 제공해야하는 전체 비 네트 목록을보고 있습니다. 나는 이것이 내가 바라던 것보다 조금 더 어려울 수도 있다고 생각한다. –