Điều gì sẽ xảy ra nếu gói được cài đặt trong nhiều thư viện? Ví dụ, trong Debian/Ubuntu người ta có thể cài đặt các gói debianized thông qua apt-get, và sau đó cũng cài đặt một phiên bản mới hơn của cùng một gói thẳng từ CRAN. Khi sử dụng thư viện(), gói mới nhất sẽ được tải hay không phụ thuộc vào thứ tự của .libPaths()?Gói R giống nhau trong nhiều thư viện
Trả lời
Như đã nói bởi những người khác, .libPaths()
nhằm tìm kiếm vấn đề đó là lý do chúng tôi thiết lập nó như vậy mà gói địa phương đang tìm kiếm đầu tiên như các phiên bản distro, đặc biệt là với Debian ổn định hoặc Ubuntu phiên bản mà không được cập nhật, có nhiều khả năng trở thành cũ .
Có một bình luận cho hiệu ứng này trong file /etc/R/Renviron
đặt nó:
# 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'}
Vì vậy, một giá trị do người dùng thiết lập các R_LIBS_SITE
sẽ nhận được ưu tiên, nếu không giá trị đưa ra ở đây được sử dụng.
Sự hiểu biết của tôi là nó sẽ phụ thuộc vào thứ tự của .libPaths(). Đây là mã từ 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
Và đây là từ các trang trợ giúp cho 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.
Và nếu có nhiều hơn một ví dụ, sau đó có phải là một cảnh báo dựa trên việc đọc của tôi về find.package
mã (trừ khi bạn đặt "tiết" thành 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)
Nếu bạn cài đặt gói bằng apt-get, bạn sẽ là người dùng sudo, do đó, librari es sẽ cài đặt ở vị trí trên toàn hệ thống (thường là/usr/lib/R).
Khi bạn sử dụng CRAN, bạn cũng có thể là sudo hoặc người dùng thông thường. Trong các gói case đầu tiên sẽ cài đặt toàn hệ thống (các tập tin ghi đè được cài đặt bằng apt-get); trong trường hợp thứ hai, các gói sẽ cài đặt vào $ HOME/R của người dùng.
Trường hợp gói tồn tại trong cả hai/usr/lib/R và $ HOME/R, vị trí đầu tiên trong .libPaths() sẽ được sử dụng khi tải (thường là $ HOME/R).
CHỈNH SỬA: như Dirk đã chỉ ra, cài đặt trên toàn hệ thống phải đi tới/usr/local/lib/R /, không/usr/lib/R. Tuy nhiên, điểm chung của tôi là: vị trí cài đặt phụ thuộc vào quyền người dùng và thứ tự tải phụ thuộc vào .libPaths().
Điều đó không chính xác, ít nhất không phải là bạn sử dụng các tệp nhị phân R được tạo sẵn cho Ubuntu hoặc Debian_ khi chúng tôi đặt 'R_LIBS' et al sao cho cài đặt cục bộ luôn đi tới'/usr/local/lib/R/'. Đề án đó đã hoạt động từ năm 2003 cho tới hàng nghìn người dùng. –
Vậy điều gì sẽ xảy ra nếu tôi chạy update.packages()? Nó sẽ cố gắng ghi đè lên các tập tin bên trong '/ usr/lib/R', hay nó sẽ cài đặt các bản sao trên'/usr/local/lib/R'? – Jeroen
Dirk bạn có thể làm rõ: trên hệ thống của tôi, tôi thấy các gói trong cả thư mục/usr/lib/R/site-library/và/usr/local/lib/R/site-library /. Dường như, ví dụ, r-cran-rjava đã được cài đặt vào thư mục/usr/lib/R/site-library/rJava. – neilfws
- 1. Di chuyển thư viện R
- 2. Ứng dụng FB giống nhau, nhiều ID gói iOS, có hậu tố khác nhau?
- 3. Đóng gói Thư viện JNI
- 4. R: kết hợp các vị trí thư viện với hầu hết các gói cập nhật
- 5. "đang sử dụng" hai thư viện khác nhau có chức năng gần như giống hệt nhau
- 6. Windows gói-manager cho C++ thư viện
- 7. Kiểm tra xem gói R có được cài đặt sau đó tải thư viện
- 8. Nhiều thư viện CMakeLists.txt
- 9. Thư viện giống STL tốt cho C
- 10. Thư viện R cho mô phỏng chuỗi Markov rời rạc
- 11. Làm cách nào để quản lý nhiều vị trí gói (thư mục) trong R?
- 12. Tăng cường giống như các thư viện trong C
- 13. Gói Haskell thiếu thư viện c
- 14. Nhiều số ngẫu nhiên đều giống nhau
- 15. Cách trỏ đến thư mục trong gói R?
- 16. Liên kết hai thư viện được chia sẻ với một số biểu tượng giống nhau
- 17. Viết một gói R khác nhau theo kiến trúc
- 18. Sao chép tệp vào thư viện chia sẻ trong R
- 19. Có thư viện thử nghiệm giống như Spock cho Python
- 20. Logic vị trí lắp đặt các gói R trong Linux
- 21. Đầu ra giống Bảng Pivot trong R?
- 22. thư viện giống như đường dây dành cho Java
- 23. Đóng gói log4j.properties trong thư viện - kiểu xấu hoặc gì?
- 24. Cài đặt R interpeter và R làm thư viện chung uder cùng một cây
- 25. Gói thư viện C cho Lua: làm cách nào để tạo các bảng hàm lồng nhau?
- 26. Sự khác nhau giữa gói django và thư viện python là gì?
- 27. JS gói nhỏ gọn và các thư viện bên ngoài
- 28. Có thư viện giống jQuery được viết bằng C# không?
- 29. Có thư viện C# để gói nhiều API của nhà cung cấp SCM không?
- 30. Gói R tự động sử dụng nhiều lõi?
+1 cho câu trả lời và mô tả cụ thể về logic bạn đã sử dụng trong thiết kế. –