2011-09-01 4 views
4

나는 최근에 R Task Views을 많이보고 있었고 관심 대상 패키지가 어떤 작업보기에도 포함되어 있지 않음을 발견했습니다. 작업보기에 나열된 패키지의 보완책을 찾을 수있는 확실한 방법이 있습니까?R 작업보기에 포함되지 않은 패키지는 어떻게 나열 할 수 있습니까?

은 내가 ctv 파일 (예를 들어, http://cran.r-project.org/web/views/Econometrics.ctv)의 XML 및 처리를 통해, 나는 <packagelist> 노드에 나열된 모든 패키지의 조합을 찾을 수 및 available.packages() 다운로드에 사용 가능한 모든 패키지를 나열 할 수 있음을 알고 있습니다. 그게 속임수입니까, 아니면 CRANberries 또는 CRANtastic과 같은 사이트를 사용하는 데 어떤 트릭이 없습니까?

업데이트 1 (이 작업을 수행하지 마십시오 - 내 대답은 아래 참조) : CRAN 목록에서 패키지에 대한 "보기 있음"을 간과했습니다. 그래서, 배후에있는 정보가 패키지에 들어있는 뷰와 일치하는 것으로 보입니다. CRAN 패키지 페이지를 모두 손쉽게 긁어 내고 "보기에서 :"를 grep 할 수 있습니다. 그것은 조금 더 우아한 ctv을 찾을 때까지 내 생각이었습니다.

업데이트 2 : ctv으로 연결되는 것을 간과했습니다. Task Views에 있다면 패키지 문서가 흥미 롭다.

답변

6

숨겨진 트릭이 없으므로 CRANberries (available.packages()을 호출하고 로컬 데이터베이스에 저장된 상태 데이터와 비교하여 시작)와 같은 것을 다시 만듭니다.

귀하의 경우에는 available.packages()이 가져 오는 것의 차이와 작업보기 선택 사항과 관련하여 ctv 패키지의 설정 차이를 계산할 수 있습니다.

편집 1 '업데이트 1'아이디어는 매우 중요합니다. 너무 조잡 해. CRAN의 메타 정보는 메타 정보를 적절하게 설명하는 메타 링크에서 비롯됩니다. 첫 번째 세트는 모든 패키지이며 각 작업보기에 대한 추가 세트는 '나열된'과 '권장'사이에 분할되어 집계됩니다.

편집 2 나는 ctv의 코드를 사용하여 out sets sets를 구문 분석한다고 생각합니다. 패키지 생성을위한 더 작은 테스트 세트를 정의하기 위해 cran2deb에 사용했습니다. 집합 (및 다른 데이터)이 주어지면 웹 페이지를 생성 할 수 있습니다. 나는 당신이 지나치게 복잡하게 생각할 수도 있습니다. R도 가능합니다 .-

+0

+1 그리고 알 것입니다. :-) "In보기"설정 방법을 알고 있습니까? CRAN HQ에서 마법의 SQL 쿼리를 잠금 해제 할 수 있다면 약간의 마법이 있다고 상상해보십시오. – Iterator

+0

내 의견을 제출하는 것보다 편집을 쓰는 것이 더 빠릅니다. :) – Iterator

6

ctv 설명서를 더 자세히 읽어야합니다. 대답은 바로 거기에있었습니다 : Views.rds이라는 .rds 파일이 있습니다. 다음은 단계별 방법은 다음과 같습니다

myRepos   <- "http://cran.r-project.org" 
tmpfile   <- tempfile() 
download.file(paste(myRepos, "src/contrib/Views.rds", sep = "/"), destfile = tmpfile) 

myViews   <- .readRDS(tmpfile) 
func_listPkgs <- function(x){return(x$packagelist$name)} 
aggRaw   <- lapply(myViews, func_listPkgs) 
aggInViews  <- unique(unlist(aggRaw)) 

availRaw  <- available.packages(contriburl = paste(myRepos, "src/contrib", sep = "/")) 
availPkgs  <- rownames(availRaw) 
notInViews  <- setdiff(availPkgs, aggInViews) 

다음은이가하고있는 작업은 다음과 같습니다

  1. IT는 CRAN 미러에서 Views.rds 파일을 가져옵니다.
  2. Views.rds를 데이터 프레임으로로드합니다. 참고 : 2.13 이전에는 .readRDS을 사용해야하고, 현재 readRDS과 2.13을 사용해야합니다. .readRDS은 여전히 ​​사용되지만 더 이상 사용되지 않습니다.
  3. 사용 가능한 패키지 목록을 가져옵니다. 보다 직접적으로 만들 수 있습니다 : Packages.gz이라는 파일이 다운로드 될 수 있지만 그 파일을 파싱해야합니다. 이미 사용 가능한 도구를 사용하겠습니다. :)
  4. 두 목록에서 차이점을 실행합니다.재미를 위해 반대로 diff : oddPackages <- setdiff(aggInViews, availPkgs)을 사용해보세요. 이들 중 일부는 기저 R에있는 패키지입니다. 누가 알아.
+1

당신은 저에게 확고한 '옙'을 얻었습니다. –

+2

보너스 크레딧 : 누군가가이 세트를 가져와 종속성, 제안, 작성자 및 작성자에 따라 여러 패키지에 대한 잠재적 인 작업보기를 제안하는 다중 클래스 분류자를 작성할 수 있습니다. 키워드 일치 (NLP 군중의 경우 :)). – Iterator