Thay đổi đường dẫn thư viện mặc định R bằng cách sử dụng .libPaths trong Rprofile.site không hoạt động


205

Tôi đang chạy R trên Windows, không phải là quản trị viên. Khi tôi cài đặt một gói, lệnh sau không hoạt động:

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable

Để cài đặt một gói, tôi phải chỉ định một vị trí thư viện:

install.packages("zoo", lib="C:/software/Rpackages")

Để tải một gói, tôi cũng phải chỉ định vị trí thư viện:

library("zoo", lib.loc="C:/software/Rpackages")

Tất cả điều này là ổn, nhưng tôi muốn xem liệu tôi có thể thêm C:/software/Rpackagesvào đường dẫn thư viện bằng cách nào đó và do đó không phải gõ nó mỗi lần.

Khi tôi tìm kiếm trực tuyến, tôi thấy rằng một cách để làm điều này là chỉnh sửa Rprofile.sitetệp và thêm dòng

.libPaths("C:/software/Rpackages")

Tuy nhiên, sau khi làm điều này và bắt đầu RStudio, đây là đầu ra mà tôi nhận được

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

Các .libPathslệnh mà tôi thêm vào Rprofile.sitedường như không có bất kỳ tác dụng! Tại sao điều này là trường hợp? Hoặc quan trọng hơn, làm thế nào tôi có thể khắc phục sự cố để tôi có thể cài đặt và tải các gói mà không cần nhập vào vị trí thư viện?

Lưu ý: nếu tôi khởi động RStudio, .libPaths()lệnh dường như hoạt động như được yêu cầu

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"

Điều đó có lạ không?


Bạn có thể mở rộng một chút về cách chính xác install.packages("zoo")không hoạt động? Thông báo lỗi, vv?
joran

1
@joran tôi đã thêm các thông báo lỗi khi tôi cố gắng install.packages("zoo")--- nhưng đó không phải là câu hỏi thực sự của tôi, mà là về việc tại sao .libPaths()trong Rprofile.sitekhông làm việc.
Tôi thích Mã

1
Bạn có gặp rắc rối tương tự nếu bạn sử dụng RGui thay vì R Studio không?
Dason

6
Tại sao đường dẫn thư viện của R mặc định cho các thư mục cần quyền quản trị?! Chắc chắn thư mục nhà của người dùng sẽ hợp lý hơn
geotheory 4/12/2015

superuser.com/questions/749283/ Chỉnh sửa ~ / .Renvir R_LIBS_USER = / some / path
Bowen.li 14/12/17

Câu trả lời:


171

Tôi thường cố gắng giữ tất cả các gói của mình trong một thư viện, nhưng nếu bạn muốn thêm thư viện tại sao không nối thêm thư viện mới (phải tồn tại trong hệ thống tệp của bạn) vào đường dẫn thư viện hiện tại?

.libPaths( c( .libPaths(), "~/userLibrary") )

Hoặc (và điều này sẽ làm cho người dùng Thư viện là nơi đầu tiên để đặt các gói mới):

.libPaths( c( "~/userLibrary" , .libPaths() ) )

Sau đó, tôi nhận được (ít nhất là trở lại khi tôi viết điều này ban đầu):

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  

Các .libPathschức năng khác nhau là một chút so với hầu hết các chức năng nongraphics khác. Nó hoạt động thông qua tác dụng phụ. Các hàm Sys.getenvSys.setenvbáo cáo và thay đổi các biến môi trường R đã được tách ra nhưng .libPathscó thể báo cáo hoặc thay đổi mục tiêu của nó.

Thông tin về quy trình khởi động R có thể được đọc tại ?Startuptrang trợ giúp và có tài liệu RStudio tại: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

Trong trường hợp của bạn, có vẻ như RStudio không tôn trọng cài đặt Rprofile.site hoặc có lẽ đang ghi đè chúng bằng cách đọc cài đặt .Rprofile từ một trong các mặc định của RStudio. Cũng cần đề cập rằng kết quả từ hoạt động này cũng nối thêm nội dung của các cuộc gọi đến .Library.Library.siteđó là lý do tại sao RStudio- (hoặc bất kỳ IDE hoặc mạng nào khác được cài đặt-) có thể biểu hiện hành vi khác nhau.

Sys.getenv()trả về môi trường hệ thống hiện tại cho quy trình R, bạn có thể thấy thư viện và các đường dẫn khác với:

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

Hai vấn đề quan trọng để lưu trữ và truy cập các gói là (bây giờ khác nhau trên hộp Linux):

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER                          /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/

12
Tôi cần đảo ngược c()vectơ để đảm bảo các thư viện mới chuyển đến thư mục tùy chỉnh
geotheory 10/2/2015

Điểm tuyệt vời. Trong thực tế, các .libPathschức năng có tác dụng tương tự theo mặc định. Cũng có một sự khác biệt giữa các hệ điều hành trong cách xử lý dấu gạch chéo. (Không ổn trên Windows). Các tùy chọn khác tồn tại. Xem?.libPaths
IRTFM

5
Đường dẫn mới thực sự phải tồn tại trong hệ thống tệp, nếu không, nó sẽ không được thêm vào đường dẫn thư viện
jarandaf

Một điểm tốt khác. Mặc dù tên hàm gợi ý khác, trước tiên bạn có thể kiểm tra file.existsvà chỉ tiếp tục nếu đường dẫn không bị thiếu.
IRTFM

3
Tôi đã làm điều này và nó hoạt động, nhưng dường như tôi phải thay đổi con đường mỗi khi tôi bắt đầu R. Điều đó có giống với những người khác không?
cyrusjan

213

Giải pháp thích hợp là đặt biến môi trường R_LIBS_USERthành giá trị của đường dẫn tệp vào thư mục thư viện mong muốn của bạn thay vì nhận RStudio để nhận ra tệp Rprofile.site.

Để đặt biến môi trường R_LIBS_USERtrong Windows, hãy chuyển đến Bảng điều khiển (Thuộc tính hệ thống -> Thuộc tính hệ thống nâng cao -> Biến môi trường -> Biến người dùng) thành giá trị mong muốn (đường dẫn đến thư mục thư viện của bạn), vd

Variable name: R_LIBS_USER 
Variable value: C:/software/Rpackages  

Đặt R_LIBS_USER sẽ đảm bảo rằng thư viện hiển thị đầu tiên trong .libPaths () bất kể khởi động RStudio trực tiếp hoặc bằng cách nhấp chuột phải vào tệp và "Mở bằng" để khởi động RStudio.

Giải pháp Rprofile có thể hoạt động nếu RStudio luôn được khởi động bằng cách nhấp vào phím tắt RStudio. Trong trường hợp này, đặt thư mục làm việc mặc định thành thư mục chứa Rprofile của bạn sẽ là đủ. Giải pháp Rprofile không hoạt động khi nhấp vào tệp để khởi động RStudio vì điều đó thay đổi thư mục làm việc ra khỏi thư mục làm việc mặc định.


2
Đồng ý giải pháp thích hợp!
felixmc

14
Chắc chắn là giải pháp thích hợp. Điều hấp dẫn duy nhất là nếu người dùng của bạn không phải là quản trị viên (có thể là trường hợp nếu bạn gặp phải vấn đề này), bạn phải thay đổi các biến môi trường thông qua Bảng điều khiển-> Tài khoản người dùng-> Tài khoản người dùng-> Thay đổi môi trường của tôi biến.
David Moye

1
Bạn có (tình cờ) biết tương đương trong dòng lệnh Linux không?
Diego-MX

5
Chắc chắn, chỉ cần đặt chúng làm biến shell của bạn (trong bash bạn có thể chỉnh sửa .bash_profilevà / hoặc .bashrc). Xem tại đây: unix.stackexchange.com/questions/117467/ Khăn Để cài đặt những thứ này cho phiên hiện tại chỉ gõ trong bảng điều khiểnexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian

2
thay vì đặt biến thông qua bảng điều khiển, tôi đã sửa đổi giá trị mặc định của R_LIB_USER trong tệp Rprofile. Đây là giải pháp: Tôi đã đưa ra một cách tiếp cận tương tự, giải pháp được trình bày dưới dạng một giải pháp cho câu hỏi này stackoverflow.com/questions/31707941/ Kẻ
Marco

24

Tôi quản lý để giải quyết vấn đề bằng cách đặt mã trong .Rprofiletệp trong thư mục làm việc mặc định.

Đầu tiên, tôi tìm thấy vị trí của thư mục làm việc mặc định

> getwd()
[1] "C:/Users/me/Documents"

Sau đó, tôi đã sử dụng một trình soạn thảo văn bản để viết một .Rprofiletập tin đơn giản với dòng sau trong đó

.libPaths("C:/software/Rpackages")

Cuối cùng, khi tôi bắt đầu Rvà chạy, .libPaths()tôi nhận được đầu ra mong muốn:

> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"
[3] "C:/Program Files/RStudio/R/library"

Điều này không hiệu quả với tôi (cả giải pháp từ BondedDust). Tôi đã tạo một tệp txt và lưu nó dưới dạng .Rprofile trong thư mục từ getwd ().
Giăng

2
@ John Tôi tin rằng chúng ta đang nói điều tương tự.
Tôi thích Mã

3
R đọc .Rprofile từ thư mục HOME của bạn không phải từ thư mục HIỆN TẠI của bạn .
Crt

Tôi đã đưa ra một cách tiếp cận tương tự, giải pháp được trình bày dưới dạng một giải pháp cho câu hỏi này stackoverflow.com/questions/31707941/iêu
Marco

Để tìm directroy nhà phát lệnh r Sys.getenv("HOME")trong bảng điều khiển r. Tôi không chắc chắn nếu bạn có được đầu ra mong muốn. Tôi nghĩ rằng kết quả mong muốn là những gì 42 thể hiện trong câu trả lời stackoverflow.com/a/15170774/754550 . Anh ta sử dụng .libPath theo một cách hoàn toàn khác.
phép lạ173


11

Tôi đã tìm thấy những gì tôi nghĩ là một giải pháp ở đây (cảm ơn Carl Schwarz tại SFU) vì đã thêm một thư viện cá nhân vĩnh viễn (bạn không phải xác định nó mỗi phiên) nhận ra liệu sử dụng R hay Rstudio và Rstudio coi nó là mặc định trên máy Mac của tôi. Tôi đã không thấy nó trình bày rõ ràng điều này trên SO, vì vậy tôi đã tóm tắt các bước họ cung cấp, cho Windows và sau đó cho Mac.

Đối với HĐH Windows 7:

  1. Tạo một thư mục trên ổ đĩa mà bạn muốn có thư viện cá nhân của mình, ví dụ: C: \ User \ Rlibs (hoặc một thư mục khác mà bạn có quyền)

  2. Tìm kiếm / chuyển đến "Chỉnh sửa biến môi trường cho tài khoản của bạn" trong thanh tìm kiếm Windows để chỉnh sửa cài đặt bảng điều khiển

  3. Nhấp vào "Mới ..." ở giữa cửa sổ "Biến môi trường"

  4. Trong cửa sổ "Biến người dùng mới", nhập R_LIBS cho "Tên biến" và đường dẫn đến thư mục thư viện cá nhân bạn đã tạo, ví dụ: C: \ User \ Rlibs

  5. Bấm OK và bạn sẽ thấy cặp Biến / Giá trị trong cửa sổ Biến người dùng

  6. Nhấn OK lần nữa

Bây giờ khi bạn khởi động R (hoặc Rstudio) và gõ lệnh, .libPaths()bạn sẽ thấy thư viện cá nhân bạn đã tạo cũng như thư viện hệ thống R.

Đối với máy Mac:

  1. Trong thư mục "Trang chủ" hoặc "tên người dùng" của bạn, hãy tạo một thư mục có tên Rlibs

  2. Khởi chạy ứng dụng Terminal

  3. Loại: echo "R_LIBS=~/Rlibs"> .RenvrionĐảm bảo trường hợp phù hợp.

  4. ls -ađể xem toàn bộ danh sách các tập tin trong thư mục, bây giờ đó phải bao gồm .Renvrion

  5. Xác minh rằng tệp .Renvir đã được đặt đúng:more .Renviron

Khởi chạy R / Rstudio và gõ .libPaths()và bạn sẽ thấy đường dẫn mới đến thư viện cá nhân của mình.


8

Nếu bạn không có quyền quản trị, bạn cũng có thể hữu ích khi mở tệp Rprofile.site-file nằm trong \ R-3.1.0 \ etc và thêm:

.First <- function(){
  .libPaths("your path here")
}

Điều này đánh giá .libPath()lệnh trực tiếp khi bắt đầu


4

Tôi đã gặp khó khăn thực sự khi hiểu điều này. gorkypl đã đưa ra giải pháp chính xác ở trên khi tôi cài đặt lại OS & Rstudio lần cuối nhưng lần này, cài đặt biến môi trường của tôi không giải quyết được.

Gỡ cài đặt cả R và Rstudio, tạo thư mục C: \ R và C: \ Rstudio sau đó cài đặt lại cả hai.

Xác định biến người dùng R_LIBS_USER vào thư mục ưa thích của bạn (theo câu trả lời của gorkypl) và khởi động lại máy của bạn để biến Người dùng được tải. Mở Rstudio, lỗi sẽ biến mất.

Bạn cũng có thể sử dụng Sys.setenv()để sửa đổi R_LIBS_USER theo đường dẫn của thư viện thay thế dễ dàng hơn và không cần phải khởi động lại máy tính của bạn.

Để xem R_LIBS_USER được đặt thành: ?Sys.getenv()

Đọc sách help(Startup)rất hữu ích.


2

Nếu thư viện gói mặc định của bạn đã bị thay đổi sau khi cài đặt phiên bản R mới hoặc bằng bất kỳ phương tiện nào khác, bạn có thể nối thêm cả hai thư viện để sử dụng tất cả các gói với sự trợ giúp của các lệnh bên dưới. Nhận đường dẫn thư viện hiện có:

.libPaths()

Bây giờ, đặt đường dẫn hiện có và cũ:

.libPaths(c(.libPaths(), "~/yourOldPath"))

Hy vọng nó giúp.


2

chỉ thay đổi thư mục mặc định cho các thư viện R của bạn trong một thư mục không có quyền Quản trị viên, vd

.libPaths("C:/R/libs")

1

Tôi đọc các readme. Trong đó họ đã đề cập sử dụng .libPaths () trong dòng lệnh để kiểm tra đường dẫn nào ở đó. Tôi đã có 2 đường dẫn thư viện trước đó. Khi tôi sử dụng lệnh .libpath ("C: / Chương trình tập tin / R / R-3.2.4revised / library") ở nơi tôi muốn, nó đã thay đổi đường dẫn thư viện. Khi tôi gõ .libPaths () vào dòng lệnh một lần nữa, nó chỉ cho tôi đường dẫn chính xác. Hi vọng điêu nay co ich


1

Trên Ubuntu, cách thay đổi đường dẫn thư viện mặc định cho người dùng được đề xuất là đặt R_LIBS_USERbiến trong ~/.Renvirontệp.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron

0
getwd()
# [1] "C:/Users/..../software/My R studio"

sao chép liên kết trên với dấu phẩy đảo ngược

.libPaths(new="C:/Users/..../software/My R studio")

Đường dẫn mặc định của bạn sẽ thay đổi để cài đặt pakages


0

Nếu bạn muốn thay đổi đường dẫn thư viện của mình vĩnh viễn (không gọi .libPath () mỗi lần khi vào R, điều này hoạt động với tôi:

  1. tạo .Rprofile trong thư mục nhà của bạn. (~ / .Rprofile)

  2. .libPaths(c( .libPaths(), "your new path" )) vào tệp .Rprofile, lưu lại.

  3. mở R (bất kỳ thư mục nào) và kiểm tra, chỉ cần gõ .libPaths(), bạn có thể tìm thấy đường dẫn libaray của mình được cập nhật!


-1

Tôi đã xem xét điều này bởi vì R gặp vấn đề khi cài đặt vào vị trí mặc định và thay vào đó chỉ đưa các gói vào thư mục tạm thời. Hóa ra đây là bản cập nhật mới nhất cho Mcaffee Endpoint Security có vẻ như có vấn đề với R. Bạn có thể vô hiệu hóa bảo vệ mối đe dọa trong khi bạn cài đặt các gói và nó sẽ hoạt động bình thường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.