Ubah jalur perpustakaan default R menggunakan .libPaths di Rprofile.site gagal berfungsi

206

Saya menjalankan R pada Windows, bukan sebagai administrator. Ketika saya menginstal paket, perintah berikut ini tidak berfungsi:

> 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

Untuk menginstal paket, saya harus menentukan lokasi perpustakaan:

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

Untuk memuat paket, saya juga harus menentukan lokasi perpustakaan:

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

Semua ini baik-baik saja, tetapi saya ingin melihat apakah saya dapat menambahkan C:/software/Rpackageske jalur pustaka entah bagaimana dan karenanya tidak harus mengetiknya setiap kali.

Ketika saya mencari online, saya menemukan bahwa salah satu cara untuk melakukan ini adalah mengedit Rprofile.sitefile dan menambahkan baris

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

Namun, setelah melakukan ini, dan memulai RStudio, ini adalah output yang saya dapatkan

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

The .libPathsperintah yang saya ditambahkan ke Rprofile.sitetampaknya tidak memiliki efek apapun! Mengapa demikian? Atau yang lebih penting, bagaimana saya bisa memperbaiki masalah sehingga saya dapat menginstal dan memuat paket tanpa mengetik di lokasi perpustakaan?

Catatan: jika saya memulai RStudio, .libPaths()perintah itu tampaknya berfungsi sebagaimana mestinya

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

Bukankah itu aneh?

Saya Suka Kode
sumber
Bisakah Anda sedikit mengembangkan bagaimana sebenarnya install.packages("zoo")tidak bekerja? Pesan kesalahan, dll?
joran
1
@joran saya menambahkan pesan kesalahan saat saya mencoba install.packages("zoo")--- tapi itu bukan pertanyaan saya yang sebenarnya, yaitu sekitar mengapa .libPaths()di Rprofile.sitetidak bekerja.
Saya Suka Kode
1
Apakah Anda memiliki masalah yang sama jika Anda menggunakan RGui, bukan R Studio?
Dason
6
Mengapa jalur perpustakaan R default ke folder yang memerlukan izin admin ?! Tentunya direktori home pengguna akan lebih masuk akal
geotheory
superuser.com/questions/749283/... Sunting ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

Jawaban:

171

Saya biasanya mencoba menyimpan semua paket saya di satu pustaka, tetapi jika Anda ingin menambahkan pustaka mengapa tidak menambahkan pustaka baru (yang harus sudah ada di sistem file Anda) ke jalur pustaka yang ada?

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

Atau (dan ini akan membuat userLibrary tempat pertama untuk meletakkan paket baru):

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

Maka saya mendapatkan (setidaknya kembali ketika saya menulis ini awalnya):

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

The .libPathsfungsi yang berbeda sedikit dari kebanyakan fungsi nongraphics lainnya. Ini bekerja melalui efek samping. Fungsi Sys.getenvdan Sys.setenvlaporan itu dan mengubah variabel lingkungan R telah dipisah tetapi .libPathsdapat melaporkan atau mengubah targetnya.

Informasi tentang proses startup R dapat dibaca di ?Startuphalaman bantuan dan ada materi RStudio di: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

Dalam kasus Anda, tampaknya RStudio tidak menghargai pengaturan Rprofile.site atau menimpanya dengan membaca pengaturan .Rprofil dari salah satu default RStudio. Juga harus disebutkan bahwa hasil dari operasi ini juga menambahkan konten panggilan ke .Librarydan .Library.site, yang merupakan alasan lebih lanjut mengapa RStudio- (atau IDE lain atau jaringan terpasang-) yang dihosting R mungkin menunjukkan perilaku yang berbeda.

Karena Sys.getenv()mengembalikan lingkungan sistem saat ini untuk proses R, Anda dapat melihat perpustakaan dan jalur lain dengan:

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

Dua hal yang penting untuk menyimpan dan mengakses paket adalah (sekarang berbeda pada kotak 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/
IRTFM
sumber
12
Saya perlu membalikkan c()vektor untuk memastikan perpustakaan baru pergi ke folder khusus
geotheory
Poin luar biasa. Bahkan .libPaths-fungsi memiliki efek yang sama secara default. Ada juga perbedaan antara OS dalam bagaimana trailing slash ditangani. (Tidak OK di Windows). Pilihan lain ada. Lihat?.libPaths
IRTFM
5
Path baru harus ada di sistem file sebenarnya, kalau tidak itu tidak akan ditambahkan ke path perpustakaan
jarandaf
Poin bagus lainnya. Meskipun nama fungsi menyarankan sebaliknya, Anda dapat memeriksa file.existsdan melanjutkan hanya jika jalurnya tidak hilang.
IRTFM
3
Saya melakukan ini dan itu berhasil, tetapi tampaknya saya harus mengubah jalan setiap kali saya memulai R. Apakah itu sama untuk orang lain?
cyrusjan
215

Solusi yang tepat adalah dengan menetapkan variabel lingkungan R_LIBS_USERke nilai path file ke folder perpustakaan yang Anda inginkan sebagai lawan mendapatkan RStudio untuk mengenali file Rprofile.site.

Untuk mengatur variabel lingkungan R_LIBS_USERdi Windows, buka Panel Kontrol (Properti Sistem -> Properti sistem lanjutan -> Variabel Lingkungan -> Variabel Pengguna) ke nilai yang diinginkan (jalur ke folder perpustakaan Anda), mis.

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

Pengaturan R_LIBS_USER akan memastikan bahwa perpustakaan muncul pertama kali di .libPaths () terlepas dari memulai RStudio secara langsung atau dengan mengklik kanan file dan "Buka Dengan" untuk memulai RStudio.

Solusi Rprofile dapat berfungsi jika RStudio selalu dimulai dengan mengklik pintasan RStudio. Dalam hal ini, pengaturan direktori kerja default ke direktori yang menampung Rprofile Anda sudah cukup. Solusi Rprofile tidak berfungsi ketika mengklik pada file untuk memulai RStudio karena itu mengubah direktori kerja dari direktori kerja default.

Paweł Rumian
sumber
2
Solusi tepat yang disepakati!
felixmc
14
Jelas solusi yang tepat. Satu-satunya masalah adalah jika pengguna Anda bukan seorang admin (kemungkinan besar jika Anda mengalami masalah ini), Anda harus mengubah variabel lingkungan Anda melalui Control Panel-> Akun Pengguna-> Akun Pengguna-> Ubah lingkungan saya variabel.
David Moye
1
Apakah Anda (kebetulan) mengetahui hal yang sama dalam baris perintah Linux?
Diego-MX
5
Tentu, cukup tetapkan ini sebagai variabel shell Anda (dalam bash Anda dapat mengedit .bash_profiledan / atau .bashrc). Lihat di sini: unix.stackexchange.com/questions/117467/... Untuk mengatur ini untuk sesi hanya ketik konsolexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian
2
alih-alih mengatur variabel melalui panel kontrol, saya telah mengubah nilai default R_LIB_USER dalam file Rprofile. Di sini solusinya: Saya datang dengan pendekatan yang serupa, solusinya disajikan sebagai solusi untuk pertanyaan ini stackoverflow.com/questions/31707941/…
Marco
24

Saya berhasil memecahkan masalah dengan menempatkan kode dalam .Rprofilefile di direktori kerja default.

Pertama, saya menemukan lokasi direktori kerja default

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

Kemudian saya menggunakan editor teks untuk menulis .Rprofilefile sederhana dengan baris berikut di dalamnya

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

Akhirnya, ketika saya memulai Rdan menjalankan, .libPaths()saya mendapatkan hasil yang diinginkan:

> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"
[3] "C:/Program Files/RStudio/R/library"
Saya Suka Kode
sumber
Ini tidak berfungsi untuk saya (juga tidak solusi dari BondedDust). Saya membuat file txt dan menyimpannya sebagai. Profil di folder dari getwd ().
John
2
@ John, saya percaya kita mengatakan hal yang sama.
Saya Suka Kode
3
R membaca. Profil dari direktori HOME Anda bukan dari direktori CURRENT Anda .
Crt
Saya datang dengan pendekatan yang sama, solusinya disajikan sebagai solusi untuk pertanyaan ini stackoverflow.com/questions/31707941/...
Marco
Untuk menemukan home directroy, keluarkan perintah r Sys.getenv("HOME")di konsol r. Saya tidak yakin apakah Anda mendapatkan output yang diinginkan. Saya pikir output yang diinginkan adalah apa yang ditunjukkan 42 dalam jawabannya stackoverflow.com/a/15170774/754550 . Dia menggunakan .libPaths dengan cara yang agak berbeda.
miracle173
11

Saya menemukan apa yang saya pikir merupakan solusi di sini (terima kasih Carl Schwarz di SFU) untuk menambahkan perpustakaan pribadi yang secara permanen (Anda tidak harus mendefinisikannya setiap sesi) mengenali apakah menggunakan R atau Rstudio, dan Rstudio memperlakukannya sebagai default pada mesin Mac saya. Saya belum melihatnya menjelaskan ini secara eksplisit pada SO, jadi saya merangkum langkah-langkah yang mereka sediakan, untuk Windows dan kemudian untuk Mac.

Untuk OS Windows 7:

  1. Buat direktori di drive tempat Anda ingin memiliki perpustakaan pribadi Anda, misalnya C: \ User \ Rlibs (atau yang lain yang Anda miliki izinnya)

  2. Cari / buka "Edit variabel lingkungan untuk akun Anda" di bilah pencarian Windows untuk mengedit pengaturan panel kontrol

  3. Klik "Baru ..." di tengah jendela "Variabel Lingkungan"

  4. Di jendela "Variabel Pengguna Baru", ketik R_LIBS untuk "Nama variabel", dan jalur ke direktori perpustakaan pribadi yang Anda buat, misalnya C: \ User \ Rlibs

  5. Klik OK dan Anda akan melihat pasangan Variabel / Nilai di jendela variabel Pengguna

  6. Klik OK lagi

Sekarang ketika Anda mulai R (atau Rstudio) dan ketik perintah .libPaths()Anda akan melihat perpustakaan pribadi yang Anda buat serta perpustakaan sistem R.

Untuk Mac:

  1. Di direktori "Beranda" atau "nama pengguna" Anda, buat folder bernama Rlibs

  2. Buka aplikasi Terminal

  3. Jenis: echo "R_LIBS=~/Rlibs"> .RenvrionPastikan kasing cocok.

  4. Ketik ls -auntuk melihat daftar lengkap file dalam direktori, yang sekarang harus menyertakan .Rvv

  5. Verifikasi bahwa file .Renviron telah disetel dengan benar:more .Renviron

Luncurkan R / Rstudio dan ketik .libPaths()dan Anda akan melihat jalur baru ke perpustakaan pribadi Anda.

Whalen
sumber
8

Jika Anda tidak memiliki hak admin, juga dapat membantu untuk membuka file Rprofile.site-file yang terletak di \ R-3.1.0 \ etc dan menambahkan:

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

Ini mengevaluasi .libPath()perintah secara langsung di awal

schlusie
sumber
4

Saya benar-benar kesulitan memahami hal ini. gorkypl memberikan solusi yang tepat di atas ketika saya menginstal ulang OS & Rstudio saya yang terakhir tetapi kali ini, mengatur variabel lingkungan saya tidak menyelesaikan.

Menghapus R dan Rstudio, membuat direktori C: \ R dan C: \ Rstudio kemudian menginstal ulang keduanya.

Tentukan R_LIBS_USER variabel pengguna ke direktori yang Anda pilih (sesuai jawaban gorkypl) dan mulai ulang mesin Anda agar variabel Pengguna dimuat. Buka Rstudio, kesalahan harus hilang.

Anda juga dapat menggunakan Sys.setenv()untuk memodifikasi R_LIBS_USER ke jalur pustaka alternatif Anda yang lebih mudah dan tidak perlu memulai ulang komputer Anda.

Untuk melihat R_LIBS_USER diatur ke: ?Sys.getenv()

Membaca help(Startup)bermanfaat.

felixmc
sumber
2

Jika pustaka paket default Anda telah diubah setelah menginstal versi R baru atau dengan cara lain, Anda dapat menambahkan kedua pustaka untuk menggunakan semua paket dengan bantuan perintah di bawah ini. Dapatkan jalur perpustakaan yang ada:

.libPaths()

Sekarang, tetapkan jalur yang ada dan yang lama:

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

Semoga ini bisa membantu.

Shivong Birla
sumber
2

cukup ubah folder default untuk pustaka R Anda di direktori tanpa hak Administrator, mis

.libPaths("C:/R/libs")
Sébastien Wieckowski
sumber
1

Saya membaca readme. Dalam hal itu mereka menyebutkan menggunakan .libPaths () di baris perintah untuk memeriksa jalur mana yang ada. Saya punya 2 jalur perpustakaan sebelumnya. Ketika saya menggunakan perintah .libpath ("C: / Program Files / R / R-3.2.4revised / library") di mana saya ingin, itu mengubah jalur perpustakaan. Ketika saya mengetikkan .libPaths () di baris perintah lagi itu menunjukkan saya jalan yang benar. Semoga ini membantu

Supriya Deverkonda
sumber
1

Di Ubuntu, cara yang disarankan untuk mengubah jalur pustaka default untuk pengguna, adalah dengan mengatur R_LIBS_USERvariabel dalam ~/.Renvironfile.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron
tzabal
sumber
0
getwd()
# [1] "C:/Users/..../software/My R studio"

salin tautan di atas dengan koma terbalik ganda

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

Jalur default Anda akan berubah untuk menginstal pakage

Sayed Mohammed Zeeshan
sumber
0

Jika Anda ingin mengubah jalur pustaka Anda secara permanen (tanpa memanggil .libPath () setiap kali ketika memasukkan R, ini berfungsi untuk saya:

  1. buat. Profil di bawah direktori home Anda. (~ /. Profil)

  2. ketik. .libPaths(c( .libPaths(), "your new path" )) File profil, simpan.

  3. buka R (direktori apa saja) dan periksa, ketikkan saja .libPaths(), Anda dapat menemukan jalur libaray Anda diperbarui!

Pengyao
sumber
-1

Saya melihat ini karena R mengalami masalah menginstal ke lokasi default dan bukannya hanya meletakkan paket ke folder temp. Ternyata itu adalah pembaruan terbaru untuk Mcaffee Endpoint Security yang tampaknya memiliki masalah dengan R. Anda dapat menonaktifkan perlindungan ancaman saat Anda menginstal paket dan itu akan berfungsi dengan baik.

Kristen Bystrom
sumber