2011-09-01 48 views
4

最近我一直在尋找R Task Views,並發現一些感興趣的包不包含在任何任務視圖中。是否有一種確定的方式來查找任務視圖中列出的包的補充?如何列出未包含在任何R任務視圖中的軟件包?

我認識到,通過XML和處理ctv文件(例如http://cran.r-project.org/web/views/Econometrics.ctv),我可以找到所有在<packagelist>節點中列出的軟件包的工會,而available.packages()可以列出所有可用的軟件包的下載。這是訣竅,還是我錯過了使用像CRANberriesCRANtastic這樣的網站的一些技巧?

更新1(不要這樣做 - 請參閱下面的答案):我忽略了提及CRAN在包中列出了「In views:」。所以,看起來幕後的一些信息與包中的視圖保持一致。人們可以很容易地(粗魯地)抓取所有CRAN包頁面,並且grep爲「In views:」。這是我最初的想法,直到我遇到了ctv,這是更優雅。

更新2:我忽略鏈接到ctv。如果您進入任務視圖,包文檔很有意思。

回答

6

沒有隱藏的技巧,只需重新創建類似CRANberries的東西(通過調用available.packages()開始,並與存儲在本地數據庫中的狀態數據進行比較)。

對於您的情況,您可能需要計算available.packages()所得到的結果與您從ctv軟件包獲得的有關任務視圖選項的結果之間的差異。

編輯1您的'更新1'的想法是粗糙的。太粗魯了。 CRAN中的元信息來源於methinks,它適當地說明了元信息:第一組是所有包,每個任務視圖的添加集,可能在「列出」和「推薦」之間進行分組並彙總。

編輯2我覺得你只是使用代碼ctv解析它的文件,出落得套。我們使用cran2deb來定義用於包創建的較小測試集。鑑於該集(和其他數據),他們可以生成網頁。我認爲你可能會過度複雜的事情。 R使這種可能,因爲我也知道太好了;-)

+0

+1你會知道的。 :-)你知道「In views」是如何設置的嗎?我想在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. 它從CRAN鏡得到Views.rds文件。
  2. 它將Views.rds加載到數據框中。注意:在2.13之前,需要使用.readRDS,現在readRDS與2.13。 .readRDS仍然有效,儘管它已被棄用。
  3. 它獲取可用包的列表。這可以更直接:有一個文件叫Packages.gz可以下載,但是我們必須解析它。讓我們堅持已有的工具。 :)
  4. 它在兩個列表上運行差異。爲了好玩,試試相反的差異:oddPackages <- setdiff(aggInViews, availPkgs)。其中一些是基於R的包。其他是???誰知道。
+1

你從我那裏得到一個堅定的'yup':) –

+2

對於獎金信用:有人可以利用這個集合並根據依賴關係,建議,作者以及建立一個多級分類器來建議不同包的潛在任務視圖關鍵字匹配(針對NLP人羣:))。 – Iterator

相關問題