เปลี่ยนเส้นทางไลบรารีเริ่มต้นของ R โดยใช้. libPaths ใน Rprofile.site ล้มเหลวในการทำงาน


206

ฉันใช้งาน R บน Windows ไม่ใช่ผู้ดูแลระบบ เมื่อฉันติดตั้งแพคเกจคำสั่งต่อไปนี้ไม่ทำงาน:

> 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

ในการติดตั้งแพ็คเกจฉันต้องระบุตำแหน่งห้องสมุด:

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

ในการโหลดแพ็คเกจฉันต้องระบุตำแหน่งห้องสมุดด้วย:

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

ทั้งหมดนี้ก็โอเค แต่ฉันต้องการที่จะดูว่าฉันสามารถเพิ่มC:/software/Rpackagesเส้นทางห้องสมุดอย่างใดและไม่ต้องพิมพ์ทุกครั้ง

ขณะที่ฉันค้นหาออนไลน์ฉันพบว่าวิธีหนึ่งในการทำเช่นนี้คือการแก้ไขRprofile.siteไฟล์และเพิ่มบรรทัด

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

อย่างไรก็ตามหลังจากทำสิ่งนี้และเริ่ม RStudio นี่คือผลลัพธ์ที่ฉันได้รับ

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

.libPathsคำสั่งที่ผมเพิ่มไปยังRprofile.siteดูเหมือนจะไม่ได้มีผลกระทบใด ๆ ! ทำไมเป็นกรณีนี้ หรือที่สำคัญกว่านั้นฉันจะแก้ไขปัญหาอย่างไรเพื่อให้ฉันสามารถติดตั้งและโหลดแพ็กเกจโดยไม่ต้องพิมพ์ในตำแหน่งไลบรารี

หมายเหตุ: ถ้าฉันเริ่ม RStudio .libPaths()ดูเหมือนว่าคำสั่งจะทำงานตามที่ควรจะเป็น

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

ไม่แปลกเหรอ?


คุณช่วยขยายความว่าinstall.packages("zoo")มันใช้งานไม่ได้จริงหรือไม่? ข้อความผิดพลาด ฯลฯ ?
joran

1
@joran ฉันเพิ่มข้อความข้อผิดพลาดเมื่อฉันพยายามinstall.packages("zoo")--- แต่ที่ไม่ได้คำถามที่แท้จริงของฉันซึ่งเป็นเรื่องเกี่ยวกับเหตุผล.libPaths()ในการRprofile.siteไม่ทำงาน
ฉันชอบ Code

1
คุณมีปัญหาเดียวกันหรือไม่ถ้าคุณใช้ RGui แทน R Studio?
Dason

6
เหตุใดเส้นทางไลบรารีของ R จึงใช้ค่าเริ่มต้นไปยังโฟลเดอร์ที่ต้องการสิทธิ์ผู้ดูแลระบบ! แน่นอนไดเรกทอรีบ้านของผู้ใช้จะมีเหตุผลมากขึ้น
geotheory

superuser.com/questions/749283/….แก้ไข ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

คำตอบ:


171

โดยทั่วไปฉันพยายามเก็บทุกแพ็คเกจของฉันไว้ในห้องสมุดเดียว แต่ถ้าคุณต้องการเพิ่มห้องสมุดทำไมไม่ผนวกไลบรารีใหม่ (ซึ่งต้องมีอยู่ในระบบไฟล์ของคุณ) ต่อท้ายเส้นทางห้องสมุดที่มีอยู่?

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

หรือ (และสิ่งนี้จะทำให้ userLibrary เป็นที่แรกในการใส่แพ็คเกจใหม่):

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

จากนั้นฉันจะได้รับ (อย่างน้อยกลับมาตอนที่ฉันเขียนตอนนี้):

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

.libPathsฟังก์ชั่นที่แตกต่างกันเล็กน้อยกว่ามากที่สุดฟังก์ชั่นอื่น ๆ nongraphics มันทำงานผ่านผลข้างเคียง ฟังก์ชั่นSys.getenvและSys.setenvรายงานและแก้ไขตัวแปรสภาพแวดล้อม R นั้นได้ถูกแยกออกจากกัน แต่.libPathsสามารถรายงานหรือแก้ไขเป้าหมายได้

ข้อมูลเกี่ยวกับกระบวนการเริ่มต้น R สามารถอ่านได้ที่?Startupหน้าช่วยเหลือและมีวัสดุ RStudio ที่: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

ในกรณีของคุณปรากฏว่า RStudio ไม่เคารพการตั้งค่า Rprofile.site หรืออาจแทนที่พวกเขาด้วยการอ่านการตั้งค่า. Profile จากหนึ่งในค่าเริ่มต้นของ RStudio มันควรจะกล่าวว่าผลจากการดำเนินการนี้ยังผนวกเนื้อหาของการโทร.Libraryและ.Library.siteซึ่งเป็นเหตุผลเพิ่มเติมว่าทำไม RStudio- (หรือ IDE หรือการติดตั้งเครือข่ายอื่น ๆ -) โฮสต์ R อาจแสดงพฤติกรรมที่แตกต่างกัน

เนื่องจากSys.getenv()ส่งคืนสภาพแวดล้อมระบบปัจจุบันสำหรับกระบวนการ R คุณสามารถดูไลบรารีและเส้นทางอื่น ๆ ด้วย:

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

สองสิ่งที่สำคัญสำหรับการจัดเก็บและเข้าถึงแพ็คเกจคือ (ตอนนี้แตกต่างกันในกล่อง 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
ฉันต้องย้อนกลับc()เวกเตอร์เพื่อให้แน่ใจว่าห้องสมุดใหม่ไปที่โฟลเดอร์ที่กำหนดเอง
geotheory

จุดที่ดีเยี่ยม ในความเป็นจริง.libPathsฟังก์ชั่นมีผลเหมือนกันโดยค่าเริ่มต้น นอกจากนี้ยังมีความแตกต่างระหว่างระบบปฏิบัติการในการจัดการสแลชต่อท้าย (ไม่ตกลงบน Windows) ตัวเลือกอื่น ๆ ที่มีอยู่ ดู?.libPaths
IRTFM

5
เส้นทางใหม่จะต้องมีอยู่ในระบบไฟล์จริงมิฉะนั้นจะไม่ถูกเพิ่มลงในเส้นทางของห้องสมุด
jarandaf

อีกจุดที่ดี แม้ว่าชื่อฟังก์ชั่นจะแนะนำเป็นอย่างอื่นคุณสามารถตรวจสอบfile.existsและดำเนินการก่อนหากเส้นทางไม่หายไป
IRTFM

3
ฉันทำมันและมันใช้งานได้ แต่ดูเหมือนว่าฉันจะต้องเปลี่ยนเส้นทางทุกครั้งที่ฉันเริ่มอาร์
cyrusjan

215

วิธีแก้ไขที่เหมาะสมคือการตั้งค่าตัวแปรสภาพแวดล้อมR_LIBS_USERเป็นค่าของพา ธ ไฟล์ไปยังโฟลเดอร์ไลบรารี่ที่คุณต้องการแทนที่จะใช้ RStudio ในการจดจำไฟล์ Rprofile.site

ในการตั้งค่าตัวแปรสภาพแวดล้อมR_LIBS_USERใน Windows ให้ไปที่แผงควบคุม (คุณสมบัติของระบบ -> คุณสมบัติระบบขั้นสูง -> ตัวแปรสภาพแวดล้อม -> ตัวแปรผู้ใช้) เป็นค่าที่ต้องการ (เส้นทางไปยังโฟลเดอร์ไลบรารีของคุณ) เช่น

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

การตั้งค่า R_LIBS_USER จะทำให้แน่ใจว่าไลบรารีแสดงเป็นครั้งแรกใน. libPaths () โดยไม่คำนึงถึงการเริ่ม RStudio โดยตรงหรือโดยการคลิกขวาที่ไฟล์และ "Open With" เพื่อเริ่ม RStudio

วิธีแก้ปัญหา Rprofile สามารถใช้งานได้หาก RStudio เริ่มต้นโดยคลิกที่ทางลัด RStudio ในกรณีนี้การตั้งค่าไดเรกทอรีการทำงานเริ่มต้นเป็นไดเรกทอรีที่บ้าน Rprofile ของคุณจะเพียงพอ โซลูชัน Rprofile ไม่ทำงานเมื่อคลิกที่ไฟล์เพื่อเริ่ม RStudio เนื่องจากจะเปลี่ยนไดเรกทอรีการทำงานออกจากไดเรกทอรีการทำงานเริ่มต้น


2
เห็นด้วยทางออกที่เหมาะสม!
felixmc

14
ทางออกที่เหมาะสมอย่างแน่นอน สิ่งที่จับได้เพียงอย่างเดียวคือถ้าผู้ใช้ของคุณไม่ใช่ผู้ดูแลระบบ (น่าจะเป็นในกรณีที่คุณมีปัญหาเริ่มต้นด้วย) คุณต้องเปลี่ยนตัวแปรสภาพแวดล้อมของคุณผ่านทางแผงควบคุม -> บัญชีผู้ใช้ -> บัญชีผู้ใช้ -> บัญชีผู้ใช้ ตัวแปร
David Moye

1
คุณรู้เรื่องเทียบเท่าในบรรทัดคำสั่ง Linux หรือไม่?
Diego-MX

5
แน่นอนเพียงแค่ตั้งค่าเหล่านี้เป็นตัวแปรเชลล์ของคุณ (ในทุบตีคุณสามารถแก้ไข.bash_profileและ / หรือ.bashrc) ดูที่นี่: unix.stackexchange.com/questions/117467/… สำหรับการตั้งค่าเหล่านี้สำหรับเซสชันปัจจุบันเท่านั้นพิมพ์ในคอนโซลexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian

2
แทนที่จะตั้งค่าตัวแปรผ่านแผงควบคุมฉันได้แก้ไขค่าเริ่มต้นของ R_LIB_USER ในไฟล์ Rprofile นี่คือวิธีการแก้ปัญหา: ฉันขึ้นมาด้วยวิธีการที่คล้ายกันแก้ปัญหาจะนำเสนอในการแก้ปัญหาเป็นไปคำถามนี้stackoverflow.com/questions/31707941/...
มาร์โก

24

ฉันจัดการเพื่อแก้ปัญหาโดยการวางรหัสใน.Rprofileไฟล์ในไดเรกทอรีการทำงานเริ่มต้น

ก่อนอื่นฉันพบที่ตั้งของไดเรกทอรีการทำงานเริ่มต้น

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

จากนั้นฉันก็ใช้โปรแกรมแก้ไขข้อความเพื่อเขียน.Rprofileไฟล์อย่างง่ายโดยมีบรรทัดต่อไปนี้อยู่

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

ในที่สุดเมื่อฉันเริ่มRและเรียกใช้.libPaths()ฉันได้ผลลัพธ์ที่ต้องการ:

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

สิ่งนี้ไม่ได้ผลสำหรับฉัน (ไม่มีวิธีแก้ปัญหาจาก BondedDust) ฉันสร้างไฟล์ txt และบันทึกเป็น. โปรไฟล์ในโฟลเดอร์จาก getwd ()
จอห์น

2
@ จอห์นฉันเชื่อว่าเรากำลังพูดในสิ่งเดียวกัน
ฉันชอบ Code

3
R อ่าน. โปรไฟล์จากไดเร็กทอรีHOMEของคุณไม่ใช่จากไดเร็กทอรีCURRENTของคุณ
Crt

ฉันมาด้วยวิธีการที่คล้ายกันแก้ปัญหาจะนำเสนอในเป็นวิธีแก้ปัญหาสำหรับคำถามนี้stackoverflow.com/questions/31707941/...
มาร์โก

หากต้องการค้นหา home directroy ใช้คำสั่ง r Sys.getenv("HOME")ในคอนโซล r ฉันไม่แน่ใจว่าคุณได้รับผลลัพธ์ที่ต้องการหรือไม่ ผมคิดว่าผลลัพธ์ที่ต้องการคือสิ่งที่แสดงให้เห็นว่า 42 ในคำตอบของเขาstackoverflow.com/a/15170774/754550 เขาใช้. libPaths ในวิธีที่ต่างกันเล็กน้อย
miracle173


11

ฉันพบสิ่งที่ฉันคิดว่าเป็นวิธีแก้ปัญหาที่นี่ (ขอบคุณ Carl Schwarz ที่ SFU) สำหรับการเพิ่มไลบรารี่ส่วนบุคคลที่ถาวร (คุณไม่จำเป็นต้องกำหนดแต่ละเซสชัน) ยอมรับว่าใช้ R หรือ Rstudio และ Rstudio ถือว่าเป็น ค่าเริ่มต้นในเครื่อง Mac ของฉัน ฉันไม่ได้เห็นมันวางไว้อย่างชัดเจนใน SO ดังนั้นฉันจึงสรุปขั้นตอนที่พวกเขาจัดเตรียมไว้สำหรับ Windows และสำหรับ Mac

สำหรับระบบปฏิบัติการ Windows 7:

  1. สร้างไดเรกทอรีบนไดรฟ์ที่คุณต้องการให้มีห้องสมุดส่วนตัวเช่น C: \ User \ Rlibs (หรืออื่น ๆ ที่คุณมีสิทธิ์)

  2. ค้นหา / ไปที่ "แก้ไขตัวแปรสภาพแวดล้อมสำหรับบัญชีของคุณ" ในแถบค้นหา Windows เพื่อแก้ไขการตั้งค่าแผงควบคุม

  3. คลิก "ใหม่ ... " ที่อยู่ตรงกลางของหน้าต่าง "ตัวแปรด้านสิ่งแวดล้อม"

  4. ในหน้าต่าง "ผู้ใช้ใหม่ตัวแปร" พิมพ์R_LIBSสำหรับ "ชื่อตัวแปร" และเส้นทางไปยังไดเรกทอรีไลบรารีส่วนบุคคลที่คุณสร้างเช่นC: \ User \ Rlibs

  5. คลิกตกลงและคุณจะเห็นคู่ของตัวแปร / ค่าในหน้าต่างตัวแปรผู้ใช้

  6. คลิกตกลงอีกครั้ง

ตอนนี้เมื่อคุณเริ่ม R (หรือ Rstudio) และพิมพ์คำสั่ง.libPaths()คุณควรเห็นไลบรารี่ส่วนบุคคลที่คุณสร้างเช่นเดียวกับไลบรารี่ของระบบ R

สำหรับ Mac:

  1. ในไดเรกทอรี "Home" หรือ "ชื่อผู้ใช้" ของคุณให้สร้างโฟลเดอร์ชื่อRlib

  2. เปิดแอปพลิเคชัน Terminal

  3. ประเภท: echo "R_LIBS=~/Rlibs"> .Renvrionตรวจสอบให้แน่ใจว่ากรณีตรงกับ

  4. พิมพ์ls -aเพื่อดูรายการไฟล์ทั้งหมดในไดเรกทอรีซึ่งควรรวม. Renvrion

  5. ตรวจสอบว่าไฟล์. Environmentถูกตั้งค่าอย่างถูกต้อง:more .Renviron

เรียกใช้ R / Rstudio และพิมพ์.libPaths()แล้วคุณจะเห็นเส้นทางใหม่ไปยังห้องสมุดส่วนตัวของคุณ


8

หากคุณไม่มีสิทธิ์ของผู้ดูแลระบบการเปิดRprofile.site-file ที่อยู่ใน\ R-3.1.0 \ etcก็เป็นประโยชน์เช่นกันและเพิ่ม:

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

สิ่งนี้จะประเมิน.libPath()คำสั่งโดยตรงเมื่อเริ่มต้น


4

ฉันมีปัญหาจริง ๆ ในการทำความเข้าใจเรื่องนี้ gorkypl ให้โซลูชันที่ถูกต้องด้านบนเมื่อฉันติดตั้งระบบปฏิบัติการ & Rstudio ครั้งล่าสุดอีกครั้ง แต่คราวนี้การตั้งค่าตัวแปรสภาพแวดล้อมของฉันไม่สามารถแก้ไขได้

ถอนการติดตั้งทั้ง R และ Rstudio สร้างไดเรกทอรี C: \ R และ C: \ Rstudio จากนั้นติดตั้งใหม่ทั้งคู่

กำหนดตัวแปรผู้ใช้ R_LIBS_USER ไปยังไดเรกทอรีที่คุณต้องการ (ตามคำตอบของ gorkypl) และรีสตาร์ทเครื่องเพื่อให้โหลดตัวแปรผู้ใช้ เปิด Rstudio ข้อผิดพลาดควรหายไป

คุณยังสามารถใช้Sys.setenv()เพื่อปรับเปลี่ยน R_LIBS_USER เป็นเส้นทางของไลบรารีทางเลือกของคุณซึ่งง่ายกว่าและไม่จำเป็นต้องรีสตาร์ทคอมพิวเตอร์

หากต้องการดูว่า R_LIBS_USER ตั้งค่าเป็น: ?Sys.getenv()

การอ่านhelp(Startup)มีประโยชน์


2

หากไลบรารีแพคเกจเริ่มต้นของคุณมีการเปลี่ยนแปลงหลังจากติดตั้ง R เวอร์ชันใหม่หรือด้วยวิธีอื่นใดคุณสามารถผนวกทั้งสองไลบรารีเพื่อใช้แพ็กเกจทั้งหมดด้วยความช่วยเหลือของคำสั่งด้านล่าง รับเส้นทางห้องสมุดที่มีอยู่:

.libPaths()

ตอนนี้ตั้งค่าที่มีอยู่และเส้นทางเก่า:

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

หวังว่ามันจะช่วย


2

เพียงแค่เปลี่ยนโฟลเดอร์เริ่มต้นสำหรับไลบรารี R ของคุณในไดเรกทอรีที่ไม่มีสิทธิ์ของผู้ดูแลระบบเช่น

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

1

ฉันอ่าน readme ในที่พวกเขากล่าวถึงใช้. libPaths () ในบรรทัดคำสั่งเพื่อตรวจสอบเส้นทางที่มี ฉันมีเส้นทางห้องสมุด 2 แห่งก่อนหน้านี้ เมื่อฉันใช้คำสั่ง. libpath ("ไฟล์ C: / Program Program / R / R-3.2.4 แก้ไข / ไลบรารี่") ที่ฉันต้องการมันเปลี่ยนพา ธ ของไลบรารี เมื่อฉันพิมพ์ด้วย. libPaths () ที่บรรทัดคำสั่งอีกครั้งมันแสดงเส้นทางที่ถูกต้องให้ฉัน หวังว่านี่จะช่วยได้


1

บน Ubuntu วิธีที่แนะนำในการเปลี่ยนเส้นทางไลบรารีเริ่มต้นสำหรับผู้ใช้คือการตั้งค่าR_LIBS_USERตัวแปรใน~/.Renvironไฟล์

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

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

คัดลอกลิงค์ด้านบนด้วยเครื่องหมายจุลภาคคว่ำคู่

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

เส้นทางเริ่มต้นของคุณจะเปลี่ยนไปสำหรับการติดตั้ง pakages


0

หากคุณต้องการเปลี่ยนเส้นทางห้องสมุดของคุณอย่างถาวร (โดยไม่เรียก. libPath () ทุกครั้งเมื่อเข้าสู่ R สิ่งนี้ใช้ได้กับฉัน:

  1. สร้าง. โปรไฟล์ภายใต้ไดเรกทอรีบ้านของคุณ (~ / .Rprofile)

  2. พิมพ์ .libPaths(c( .libPaths(), "your new path" )) ไฟล์. profile, save

  3. เปิด R (ไดเรกทอรีใด ๆ ) และตรวจสอบเพียงพิมพ์.libPaths()คุณสามารถค้นหาเส้นทาง libaray ของคุณได้รับการปรับปรุง!


-1

ฉันกำลังมองหาสิ่งนี้เพราะ R กำลังมีปัญหาในการติดตั้งลงในตำแหน่งเริ่มต้นและแทนที่จะวางแพ็คเกจลงในโฟลเดอร์ชั่วคราว มันกลายเป็นอัพเดตล่าสุดสำหรับ Mcaffee Endpoint Security ซึ่งเห็นได้ชัดว่ามีปัญหากับ R คุณสามารถปิดการป้องกันภัยคุกคามในขณะที่คุณติดตั้งแพคเกจและมันจะทำงานอย่างถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.