2012-12-23 51 views
0

在Linux Ubuntu 12.04上安裝Rcpp,R2.15.2 NB昨天安裝了R和rcpp;所以我期望最新的版本,但Rcpp作爲過時的版本安裝!Rcpp未正確安裝,R2.15.2

> old.packages() 

    Package LibPath     Installed Built ReposVer 
Rcpp "Rcpp" "/usr/lib/R/site-library" "0.9.9" "2.14.1" "0.10.2" 
rgl "rgl" "/usr/lib/R/site-library" "0.92.798" "2.12.1" "0.92.894" 
    Repository         
Rcpp "http://www.stats.bris.ac.uk/R/src/contrib" 
rgl "http://www.stats.bris.ac.uk/R/src/contrib" 
> update.packages("Rcpp") 

如最後一行所示,它根本沒有更新包Rcpp;是什麼導致了這一點,我能做些什麼來解決這個問題?

NB嘗試從兩個不同的存儲庫重新安裝,這兩個存儲庫聲稱擁有rcpp的最新版本0.10.2。

問候

人Jefe

回答

4

你只是誤會。

你有的Rcpp是從Ubuntu,並通過apt-get等安裝。當發行版凍結時,該版本被凍結。這與gcc,emacs,...不是最新版本現在可用類似,但是在發行發行時採用的版本。另外,即使這個Ubuntu版本現在只有一個發行日期,因爲12.10已經過期......

所以你的問題標題是錯誤的。作爲Ubuntu 12.04的一部分,版本已正確安裝現在有道理嗎?

現在,如果您通過install.packages()從CRAN安裝Rcpp,您將獲得當前版本,即rgl的同義詞。

(而且也有PPA有關LaunchPad同時具有作爲預生成.deb軟件包,其可能的。)

最後,和前面解釋的,路徑/usr/lib/R/site-library對於r-cran-*包安裝的deb包文件,其中/usr/local/lib/R/site-library適用於您本地的 從R本身安裝。由於這種分裂,從前路徑驅動的old.packages()的輸出(例如/usr/lib/R/site-library)必然落後於它,因爲它由發行版(這裏是Ubuntu)管理。您選擇了發行版來確保其組件的穩定性 - 您可以在/usr/local/lib/R/site-library的CRAN軟件包中自由擴充它。這絕對是一個功能。

見證這從我的Ubuntu的盒子:

R> old.packages(lib.loc="/usr/local/lib/R/site-library/") 
NULL 
R> 
+0

我也跑install.packages()之前,我以前的帖子,隨後重啓R(使用sudo R)之前檢查old.packages() 。我現在檢查了lib.loc「」..並且是的,似乎我安裝了兩個版本的rcpp,但命令庫(Rcpp)正在拾取較舊的庫。我如何將它指向新版本? –

+0

剛剛試過庫(Rcpp,lib.loc =「/ usr/local/lib/R/site-library /」),並且C++代碼正常工作,即拾取庫的正確版本;我認爲現在是必要的對於所有其他庫? –

+0

'.libPaths()'返回的結果是什麼?你應該有三個入口,第一個入口和第一個入口都是默認的 - 這樣'/ usr/local'有優先權。我們設置'.libPaths ()''通過'/ etc/R/Renvinron',一個到'$ R_HOME/etc/Renviron'中的文件的軟鏈接。你能否(意外地)覆蓋這個? –