2011-10-11 191 views
12

R是否有依賴管理工具來促進項目特定的依賴關係?我正在尋找類似於Java的maven,Ruby的打包器,Python的virtualenv,Node的npm等。R中的依賴關係管理

我知道DESCRIPTION文件中的「Depends」子句以及R_LIBS工具,但這些似乎沒有協同工作來爲一些非常常見的工作流程提供解決方案。

我基本上希望能夠檢出項目並運行一個命令來構建和測試項目。該命令應該將任何必需的軟件包安裝到項目特定的庫中,而不會影響全局R安裝。例如: -

my_project/.Rlibs/* 
+0

查看R包'ProjectTemplate'和'devtools'。 – Ramnath

+0

ProjectTemplate不支持這一點。該文檔說庫必須已經安裝: 「庫:這是一個逗號分隔的列表,用戶想在調用load.project()時自動加載的所有R包,這些包必須已經安裝調用load.project()。默認情況下,reshape,plyr,ggplot2,stringr和lubridate包都包含在這個列表中。「 – yoni

+1

看起來像devtools有一些偉大的東西,但它也缺乏這個。 – yoni

回答

5

作爲一個缺口,我寫了一個新的rbundler包。它將項目依賴項安裝到項目特定的子目錄(例如<PROJECT>/.Rbundle)中,允許用戶避免使用全局庫。

我們已經使用rbundler在Opower幾個月現在已經看到了開發人員的工作流程,可測性一個巨大的進步,以及內部可維護性包。結合我們的內部軟件包存儲庫,我們已經能夠穩定開發十幾個包裝用於生產應用。

常見的工作流程:

  • 退房從GitHub項目
  • cd到項目目錄
  • 火了研發
  • 從R控制檯:

    庫(rbundler)

    束(「」)

所有相關性將被安裝到./.Rbundle.Renviron文件將被創建具有以下內容:

R_LIBS_USER='.Rbundle' 

不限ř操作從內這個運行項目目錄將遵循項目特定的庫和包依賴關係。請注意,雖然此方法使用包描述來定義依賴關係,但它不需要具有實際的包結構。因此,rbundler成爲管理R項目的一般工具,不管它是簡單的腳本還是全面的包。

+1

初看起來,我覺得這確實是PackRat(http://rstudio.github.io/packrat /),最近由RStudio團隊發佈,我錯了嗎? – jhin

+3

感謝您提出這個問題,@jhin。在我開始開發'rbundler'的時候,我和@hadley以及RStudio的人談到了這個問題。不同之處在於'rbundler'專注於_package_開發,並且利用了'DESCRIPTION'文件中的顯式依賴關係,而'PackRat'關注於通用項目開發,並且通過反射來派生您的依賴關係。 PackRat具有一些附加功能來快照您的依賴項,以便於部署和共享。我相信這是他們管理託管項目的首選解決方案。 – yoni

+0

啊,我明白了。我只是想用rbundler瞭解軟件包部署工作流程,但我不確定我是否正確。假設我已經開發了一個包,並且將它的依賴與rbundler捆綁在一起。當有人安裝我的包時會發生什麼,例如使用miniCRAN的devtools'install(「mypack」)'(假設這就是你的意思是「我們的內部軟件包庫」)?包依賴關係如何解決? – jhin

1

您可以使用下面的工作流程:

1)創建一個腳本文件,其中包含要設置的一切,並儲存到您的projectd目錄例如projectInit.R

2)源此腳本從.Rprofile(或任何其他文件通過啓動r執行)與try語句

try(source("./projectInit.R"), silent=TRUE) 

這將保證即使沒有projectInit.R發現,R啓動無錯誤消息

3)如果你在你的項目目錄開始R,該projectInit.R文件將被如果出現在目錄中,您準備去

這是從Linux的角度和來源,但應該以與unde相同的方式工作Windows和Mac。

+0

對不起 - 我沒有看到「安裝」部分。我必須在這裏與德克一起去 - 這必須是特定於平臺的,但是有例如一個bash腳本得心應手,它可以實現所有你想要的(與上面提到的projectInit.R文件一起使用) – Rainer

6

不幸的是,DESCRIPTION:文件中Depends:是你得到的,原因如下:

  • [R本身是合理的跨平臺的,但是這意味着我們需要這個跨平臺的工作和操作系統
  • 編碼取決於:除了R包之外,還需要在整個操作系統中以便攜式的方式編碼Depends ---甚至可以通過可以在系統中明確解析的方式簡單的「像PNG圖形庫」這樣簡單的東西編碼
  • 和Windows不具備的軟件包管理器
  • AFAIK OS X沒有混合了蘋果公司的船舶和什麼其他開源項目提供
  • 即使在Linux發行版的軟件包管理器,你沒有得到一致性:只取RStudio爲一個例子來自RedHat/Fedora和Debian/Ubuntu的兩個軟件包(都提供它們的依賴關係!)

這是一個難題。

+3

對於剛剛有這種禮貌而不留下評論的人:*你做錯了* 。只有在評論中我們可以討論每個人都可以學到的東西。隨機推動的降低音量對任何人都沒有幫助 –