如果包安裝在多個庫中會發生什麼?例如,在Debian/Ubuntu中,可以通過apt-get安裝debianized軟件包,然後直接從CRAN安裝更新版本的相同軟件包。當使用library()時,最近的包會被加載,還是取決於.libPaths()的順序?多個庫中的相同R包
回答
爲,.libPaths()
搜索順序無論這就是爲什麼我們把它使得本地包搜索的第一個作爲發行版本,尤其是未被更新的Debian的穩定或Ubuntu的發行版中,更可能是老年人。
有該文件/etc/R/Renviron
在這種效應的留言設定它:
# edd Apr 2003 Allow local install in /usr/local, also add a directory for
# Debian packaged CRAN packages, and finally the default dir
# edd Jul 2007 Now use R_LIBS_SITE, not R_LIBS
R_LIBS_SITE=${R_LIBS_SITE-'/usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library'}
所以R_LIBS_SITE
用戶設置的值會得到優先,否則會使用此處顯示的值。
我的理解是,它將取決於.libPaths()的順序。這是library
if (!missing(package)) {
if (is.null(lib.loc))
lib.loc <- .libPaths()
lib.loc <- lib.loc[file.info(lib.loc)$isdir %in% TRUE]
# >>>> snipped code
newpackage <- is.na(match(pkgname, search()))
if (newpackage) {
pkgpath <- find.package(package, lib.loc, quiet = TRUE,
verbose = verbose)
if (length(pkgpath) == 0L) {
# snipped
碼這是從幫助頁面find.package
Details
find.package returns path to the locations where the given packages are found.
If lib.loc is NULL, then attached packages are searched before the libraries.
If a package is found more than once, the first match is used.
如果有多個實例,那麼就應該根據我的find.package
的閱讀是一個警告代碼(除非你設置「詳細」爲FALSE):
if (length(paths) > 1L) {
paths <- paths[1L]
if (verbose)
warning(gettextf("package %s found more than once,\n
using the one found in %s",
sQuote(pkg), sQuote(paths)), domain = NA)
如果使用安裝軟件包apt-get的,你會sudo的用戶,所以librari es將安裝在系統範圍內的位置(通常是/ usr/lib/R)。
當您使用CRAN時,您也可能是sudo或普通用戶。在第一種情況下,軟件包將安裝系統範圍(使用apt-get安裝的覆蓋文件);在第二種情況下,軟件包將安裝到用戶的$ HOME/R。
在/ usr/lib/R和$ HOME/R中都存在程序包的情況下,加載時通常會使用.libPaths()中的第一個位置(通常爲$ HOME/R)。
編輯:因爲德克指出,全系統的安裝應該去到/ usr/local/lib目錄/ R /,而不是/ usr/lib中/ R。但是,我的一般觀點是:安裝位置取決於用戶權限,加載順序取決於.libPaths()。已經被別人說
這是不正確的,至少如果你使用預先製作的R或二進制文件用於Ubuntu或Debian_,我們設置了'R_LIBS'等,以便本地安裝總是進入'/ usr/local/lib/R /'。該計劃自2003年以來對成千上萬的用戶起作用。 – 2012-01-08 23:13:53
那麼,如果我運行update.packages()會發生什麼?它會嘗試覆蓋'/ usr/lib/R'中的文件,還是會在'/ usr/local/lib/R'上安裝副本? – Jeroen 2012-01-09 04:12:55
Dirk能否澄清一下:在我的系統中,我在/ usr/lib/R/site-library /和/ usr/local/lib/R/site-library /中看到了軟件包。例如,似乎r-cran-rjava已經安裝到/ usr/lib/R/site-library/rJava。 – neilfws 2012-01-09 22:37:18
- 1. R中多個類的相同方法
- 2. 對多個包的相同更改Eclipse
- 3. 檢測多個包含相同的JavaScript文件/庫
- 4. 相同靜態庫的多個副本?
- 5. 多個庫具有相同的封裝
- 6. 多個相同的數據庫
- 7. 通過r中的多個參數調用相同的函數?
- 8. 組合多個相同名稱的列中的R
- 9. 中的R相同的data.frame
- 10. SSIS包循環運行在相同的數據庫相同的包中
- 11. 應用到多個數據集相同功能中的R
- 12. 鏈接多個文件,同時在R中創建一個包
- 13. 將相同的R軟件包安裝到R studiio
- 14. 你如何使用同一個R包的多個版本?
- 15. R中的多個數據庫連接
- 16. 同一圖中的多個圖[R]
- 17. 在ASP.NET中設置包含相同文本的多個文字
- 18. 在多個HTML頁面中包含相同的DIV
- 19. 如何在多個視圖中包含相同的表單?
- 20. 更新Mongo中包含相同對象的多個文檔?
- 21. 在多個.cpp中包含相同的頭文件
- 22. 在R中相交多個數據集
- 23. 對數據庫中的多個表執行相同的查詢
- 24. CMake的多個項目中使用相同的庫
- 25. 從不同文件夾的多個庫中導入一個相同的變量
- 26. nexus中的兩個不同的存儲庫包含相同的罐子
- 27. 在多個div中包裝多個具有相同類名的孩子jQuery
- 28. R - 將相同的腳本應用於多個數據框
- 29. R/quantmod:多個圖表全部使用相同的y軸
- 30. 如何檢查多個R對象的相同?
對於Debian特定的答案和對設計中使用的邏輯的描述+1。 – 2012-01-08 23:24:37