คุณจะใช้แพ็คเกจ R เดียวกันหลายเวอร์ชันได้อย่างไร

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

ความคิดของฉันจนถึงตอนนี้คือ:

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

ฉันไม่จำเป็นต้องโหลดแพ็คเกจทั้งสองเวอร์ชันพร้อมกัน (เพิ่งติดตั้งที่ไหนสักแห่งในเวลาเดียวกัน) บางทีฉันอาจยุ่งกับ Sys.getenv('R_HOME') เพื่อเปลี่ยนตำแหน่งที่ R ติดตั้งแพ็คเกจ จากนั้น .libpaths() เพื่อเปลี่ยนตำแหน่งที่ R ค้นหาแพ็คเกจเหล่านั้น ดูเหมือนว่าจะแฮ็ก มีใครมีความคิดที่ดีกว่านี้ไหม


person Richie Cotton    schedule 07.06.2010    source แหล่งที่มา
comment
ในความช่วยเหลือของ update.packages มีการกล่าวถึงอาร์กิวเมนต์ installWithVers คุณสามารถลองตรวจสอบได้ (หรือฉันจะตรวจสอบในภายหลังและโพสต์เป็นคำตอบ;))   -  person Marek    schedule 07.06.2010
comment
และกระทู้นี้อาจมีประโยชน์ stat.ethz.ch/pipermail/ r-help/2008-กุมภาพันธ์/153580.html   -  person Marek    schedule 07.06.2010
comment
@Marek: ตามไฟล์ NEWS การติดตั้งเวอร์ชันเลิกใช้แล้วใน R2.9.0 cran.r-project.org/src/base/NEWS   -  person Richie Cotton    schedule 07.06.2010
comment
คุณยังสามารถใช้ R เวอร์ชันที่แตกต่างกันสองเวอร์ชันได้ (เช่น R 2.11 และ 2.11.1) และแยกแพ็คเกจที่แตกต่างกันออกไป จากนั้นคุณสามารถรันทั้งสองเวอร์ชันพร้อมกันได้ ฉันมักจะทำเช่นนี้ตัวเอง   -  person Shane    schedule 07.06.2010


คำตอบ (3)


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

 library(foo, lib.loc="~/dev/foo/v1")    ## loads v1

และ

 library(foo, lib.loc="~/dev/foo/v2")    ## loads v2

แน่นอนว่าสิ่งนี้ใช้ได้กับ install.packages() แน่นอน คำสั่งทั้งหมดเหล่านี้มีข้อโต้แย้งจำนวนหนึ่ง ดังนั้น hooks ที่คุณมุ่งหมายอาจมีอยู่แล้ว ดังนั้นอย่าดูที่การเปลี่ยนแปลง R_HOME แต่ให้ดูที่ help(install.packages) (สมมติว่าคุณติดตั้งจากแหล่งที่มา)

แต่ AFAIK คุณไม่สามารถโหลดแพ็คเกจเดียวกันสองครั้งภายใต้ชื่อเดียวกันได้

person Dirk Eddelbuettel    schedule 07.06.2010
comment
และสำหรับการติดตั้ง คุณสามารถทำได้หากจำเป็น lb = .libPaths(); .libPaths(c('/custom/path', lb)) - person geotheory; 05.04.2017

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

การจัดการแพ็คเกจหลายเวอร์ชัน

สำหรับการจัดการแพ็กเกจหลายเวอร์ชันในระดับโปรเจ็กต์ (ไดเร็กทอรี) เครื่องมือ packrat จะมีประโยชน์: https://rstudio.github.io/packrat/. ในระยะสั้น

Packrat ปรับปรุงไดเร็กทอรีโปรเจ็กต์ของคุณโดยจัดเก็บการขึ้นต่อกันของแพ็คเกจไว้ข้างใน แทนที่จะอาศัยไลบรารี R ส่วนตัวของคุณที่แชร์ในเซสชัน R อื่น ๆ ทั้งหมดของคุณ

โดยพื้นฐานแล้วหมายความว่าแต่ละโปรเจ็กต์ของคุณสามารถมี "ไลบรารีส่วนตัว" ของตัวเองได้ ซึ่งแยกออกจากไลบรารีผู้ใช้และไลบรารีระบบ หากคุณใช้ RStudio packrat จะได้รับการผสานรวมอย่างประณีตและใช้งานง่าย

การติดตั้งเวอร์ชันแพ็คเกจแบบกำหนดเอง

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

devtools::install_version("ggplot2", version = "0.9.1")

อีกทางหนึ่ง ตามที่ Richie แนะนำ ขณะนี้มีแพ็คเกจที่มีน้ำหนักเบากว่าที่เรียกว่า รีโมท ซึ่งเป็นผลมาจาก การแยกส่วนของ devtools ออกเป็นแพ็คเกจขนาดเล็ก โดยมีการใช้งานที่คล้ายกันมาก:

remotes::install_version("ggplot2", version = "0.9.1")

ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้สามารถพบได้:

person Jozef    schedule 29.12.2018
comment
ด้วยความเคารพต่อความพยายามในการขจัดคำถามเก่าแปด (!!) ปี OP ไม่ ถามเกี่ยวกับการจัดการการพึ่งพา และ ไม่ เกี่ยวกับการติดตั้งหมายเลขเวอร์ชันที่ปักหมุดไว้ คุณก็เลยตะโกนเข้าไปในความว่างเปล่าที่นี่... - person Dirk Eddelbuettel; 30.12.2018
comment
วิธีที่ฉันเข้าใจคำถามคือ OP พยายามใช้แพ็คเกจเดียวหลายเวอร์ชัน สำหรับสิ่งนี้ต้องทำ 2 สิ่ง: 1) ติดตั้งแพ็คเกจหลายเวอร์ชัน (ซึ่งฉันแนะนำ devtools::install_version) 2) จัดการอย่างปลอดภัยว่าจะติดตั้งและโหลดจากที่ใด (ซึ่งฉันพูดถึง packrat) - ซึ่งทำสิ่งที่คล้ายกันมากได้อย่างมีประสิทธิภาพ กับคำตอบเดิมของคุณด้วยวิธีที่ง่ายกว่า (ส่วนตัว) - person Jozef; 30.12.2018
comment
@Jozef เนื่องจาก devtools กำลังถูกแยกย่อยเป็นแพ็คเกจขนาดเล็ก คุณอาจต้องการสลับ devtools::install_version() สำหรับ remotes::install_version() - person Richie Cotton; 01.01.2019
comment
โปรดทราบว่า install_version จะเขียนทับการติดตั้งที่มีอยู่ - person jiggunjer; 14.06.2019

ฉันทำงานกับ R มาเป็นเวลานานแล้ว และเพิ่งมาวันนี้เท่านั้นที่คิดเรื่องนี้ แนวคิดนี้มาจากการที่ฉันเริ่มเล่นกับ Python และขั้นตอนแรกที่ฉันต้องทำคือจัดการสิ่งที่พวกเขา (pythonistas) เรียกว่าสภาพแวดล้อมเสมือน พวกเขายังมีเครื่องมือเฉพาะสำหรับงานที่ดูเหมือนสำคัญนี้อีกด้วย ฉันแจ้งให้ตัวเองทราบมากขึ้นเกี่ยวกับแง่มุมนี้และทำไมพวกเขาถึงจริงจังกับเรื่องนี้ ในที่สุดฉันก็รู้ว่านี่เป็นวิธีที่เรียบร้อยและสำคัญในการจัดการโปรเจ็กต์ต่างๆ ที่มีการขึ้นต่อกันที่ขัดแย้งกัน ฉันอยากรู้ว่าเหตุใด R จึงไม่มีคุณสมบัตินี้ และพบว่าจริงๆ แล้วแนวคิดเกี่ยวกับสภาพแวดล้อมนั้นมีอยู่ใน R แต่ไม่ได้รับการแนะนำให้รู้จักกับมือใหม่เหมือนใน Python ดังนั้นคุณต้องตรวจสอบเอกสารเกี่ยวกับเรื่องนี้และจะช่วยแก้ปัญหาของคุณได้ ขอโทษที่เดินเตร่ แต่ฉันคิดว่ามันจะช่วยได้

person Faustin Gashakamba    schedule 03.03.2021