การตั้งค่า .libPaths() สำหรับการเรียกใช้สคริปต์ R จากบรรทัดคำสั่งโดยใช้ Rscript.exe

ฉันกำลังพยายามเรียกใช้สคริปต์ R ผ่านไฟล์ BAT บนพรอมต์คำสั่งของ Windows

สคริปต์ต้องการแพ็คเกจ R สองสามชุด เช่น data.table, tidyR เป็นต้น

เพื่อเหตุผลในการปฏิบัติงาน แพ็คเกจ R และการขึ้นต่อกันที่จำเป็นทั้งหมด (รวมถึง data.table) จะถูกติดตั้งที่ C:\Users\username\Documents\R\R-3.5.1\library ฉันไม่ได้รับอนุญาตให้ติดตั้ง RStudio ในสภาพแวดล้อมนี้

เมื่อฉันลอง "C:\Program Files\R\R-3.5.1\bin\x64\Rscript.exe" script.R ฉันได้รับข้อผิดพลาดที่คล้ายกัน

ข้อผิดพลาดในไลบรารี (data.table) : ไม่มีแพ็คเกจชื่อ 'data.table' การดำเนินการหยุดลง

ฉันจะตั้งค่า .libPaths ผ่าน Command Prompt ให้ชี้ไปยังตำแหน่งที่ถูกต้องของแพ็คเกจ (เช่น C:\Users\username\Documents\R\R-3.5.1\library) ได้อย่างไร

ขอบคุณล่วงหน้า.


person user799188    schedule 05.11.2018    source แหล่งที่มา
comment
แล้วการเพิ่ม: .libPaths(paste("C:/Users/",Sys.getenv("USERNAME"),"/Documents/R/R-3.5.1/library",sep="")) ที่จุดเริ่มต้นของสคริปต์ของคุณล่ะ?   -  person Maylo    schedule 05.11.2018
comment
ฉันคิดว่าคำถามนี้ไม่เกี่ยวข้องกับแท็ก batch-file...   -  person Aacini    schedule 05.11.2018


คำตอบ (1)


ข้อจำกัดความรับผิดชอบ: ฉันไม่คุ้นเคยกับ R

จาก R: เส้นทางการค้นหา :

พาธการค้นหาไลบรารีจะเริ่มต้นเมื่อเริ่มต้นจากตัวแปรสภาพแวดล้อม R_LIBS (ซึ่งควรเป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งมีการรูทแผนผังไลบรารี R) ตามด้วยตัวแปรสภาพแวดล้อม R_LIBS_USER เฉพาะไดเร็กทอรีที่มีอยู่ในขณะนั้นเท่านั้นที่จะถูกรวมไว้

โดยค่าเริ่มต้น R_LIBS ไม่ได้ตั้งค่า และ R_LIBS_USER ถูกตั้งค่าเป็นไดเรกทอรี 'R/R.version$platform-library/x.y' ของโฮมไดเร็กตอรี่ (หรือ 'Library/R/x.y/library' สำหรับ CRAN macOS builds) สำหรับ R เอ็กซ์.วาย.ซี.

ตัวแปรสภาพแวดล้อมสามารถสร้างได้ด้วยคำสั่ง set VARIABLE_NAME=YOUR_VALUE แบทช์

ดังนั้นไฟล์แบตช์ของคุณน่าจะเป็นดังนี้:

cd /d "C:\INSERT_PATH_TO_DIRECTORY_CONTAINING_script.R"
set "R_LIBS=C:\Users\username\Documents\R\R-3.5.1\library"
"C:\Program Files\R\R-3.5.1\bin\x64\Rscript.exe" script.R

อย่างไรก็ตาม ด้วยเหตุผลด้านความสามารถในการพกพา (สมมติว่าเพื่อนร่วมงานขอสำเนาสคริปต์ของคุณ ไม่เช่นนั้นคอมพิวเตอร์ของคุณเสีย) ฉันขอแนะนำให้วางสคริปต์ ไลบรารี R และไฟล์แบตช์ไว้ในไดเร็กทอรีเดียว สมมติว่า C:\Users\username\Documents\R ไฟล์แบตช์ C:\Users\username\Documents\R\script.bat กลายเป็น:

cd /d "%~dp0"
set "R_LIBS=%~dp0R-3.5.1\library"
"%PROGRAMFILES%\R\R-3.5.1\bin\x64\Rscript.exe" "%~dpn0.R"

%PROGRAMFILES% ตัวแปรสภาพแวดล้อมขยายไปยังเส้นทางแบบเต็มของโฟลเดอร์ program files, %~dp0 พารามิเตอร์ ขยายไปยังเส้นทางแบบเต็มของ ไดเร็กทอรีที่เก็บแบตช์ไฟล์ของคุณ และ %~dpn0 เป็นพาธแบบเต็มของแบตช์ไฟล์ที่ไม่มีนามสกุล

โปรดสังเกตว่า %~dp0R-3.5.1 ไม่ใช่ตัวพิมพ์ผิด เนื่องจาก %~dp0 มีแบ็กสแลชต่อท้าย

วิธีนี้ทำให้คุณสามารถคัดลอก C:\Users\username\Documents\R ไปยัง D:\Users\SOMEOTHERNAME\Documents\R และสคริปต์จะยังคงทำงานอยู่

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

หรืออีกทางหนึ่ง หากคุณต้องการติดตั้งไลบรารีแยกกัน คุณอาจต้องการใช้ %HOMEDRIVE%%HOMEPATH% ซึ่งจะขยายเป็น C:\Users\username

การแยกเส้นทางโฟลเดอร์ Documents ที่เหมาะสม รวมถึงเส้นทางการติดตั้ง R สามารถทำได้ แต่ต้องอ่านรีจิสทรีจึงจะซับซ้อนกว่าเล็กน้อย

person Jack White    schedule 05.11.2018