เรียกใช้สคริปต์ R จากบรรทัดคำสั่ง


484

ฉันมีไฟล์ที่เรียกว่าa.rมันมีchmodของ 755

sayHello <- function(){
   print('hello')
}

sayHello()

ฉันจะเรียกใช้ผ่านทางบรรทัดคำสั่งได้อย่างไร



5
tl; dr: เพิ่มบรรทัดแรกของสคริปต์ของคุณ:#!/usr/bin/env Rscript

คำตอบ:


671

หากคุณต้องการให้เอาต์พุตพิมพ์ไปยังเทอร์มินัลวิธีที่ดีที่สุดคือใช้ Rscript

Rscript a.R

โปรดทราบว่าเมื่อใช้งานR CMD BATCH a.Rนั้นแทนที่จะเปลี่ยนเส้นทางไปยังเอาต์พุตมาตรฐานและแสดงบนเทอร์มินัลไฟล์ใหม่ที่ชื่อว่า a.Rout จะถูกสร้างขึ้น

R CMD BATCH a.R
# Check the output
cat a.Rout

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

หากคุณต้องการใช้./a.Rวิธีการเรียกใช้สคริปต์จริงๆคุณสามารถเพิ่มที่เหมาะสม#!ไปด้านบนของสคริปต์

#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}

sayHello()

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


28
ปราศจาก #! บรรทัดคำสั่งของคุณพยายามเรียกใช้เป็นสคริปต์บรรทัดคำสั่งโดยใช้ล่ามเดียวกับที่ตีความคำสั่งของคุณ มันไม่รู้ว่ามันควรจะเป็น R แม้ว่าไฟล์จะลงท้ายด้วย. R หรือ. r The #! บอกบรรทัดคำสั่งว่าภาษาใดมีอยู่ในไฟล์
Spacedman

4
ฉันจับคำถามสองสามข้อที่นี่ในช่วงหลายปีที่ผ่านมาและสามารถอ้างอิงได้ทั้ง littler และ Rscript สิ่งสำคัญคือการบอกคนอย่างที่คุณทำนั่นR CMD BATCHแย่มาก สิ่งใด แต่ที่ ...
เดิร์ค Eddelbuettel

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

มีวิธีแก้ไขไลบรารีพา ธ ในคำสั่งของตัวเองหรือไม่? สิ่งที่คล้ายกับR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes

@mikemtnbikes ไม่ใช่ที่ฉันรู้ หนึ่งสามารถเพิ่มบางสิ่งบางอย่างเพื่อเปลี่ยน. libPaths () ภายในสคริปต์ แต่ฉันไม่เห็นตัวเลือกใด ๆ ที่ชี้ให้เห็นในหน้า man สำหรับ Rscript
Dason

107

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

  • ในการติดตั้งไปยังตำแหน่งเริ่มต้น:

    R -e 'install.packages(c("package1", "package2"))'
  • ในการติดตั้งไปยังตำแหน่งที่ต้องการrootสิทธิ์พิเศษ:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 

5
เพื่อรันคำสั่งคุณสามารถใช้Rscript -e "getwd()"ในเทอร์มินัล Rscript จะพิมพ์เอาต์พุตคำสั่งเท่านั้นไม่ใช่ข้อความ R startup ทั้งหมด
Paul Rougieux

คุณยังสามารถใช้r -e "cat(getwd(),'\n')"หากคุณติดตั้ง littler แล้ว ในคำตอบนี้ Dirk Eddelbuettel อธิบายความแตกต่างระหว่าง littler และ Rscript
Paul Rougieux

2
ขอบคุณสำหรับการคาดการณ์ปัญหาของฉัน! ฉันต้องการอีกสิ่งหนึ่ง:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin

4
หนึ่งควรใช้R -r 'options(warn=2); install...'เพื่อหยุดการดำเนินการและรับรหัสข้อผิดพลาดที่ไม่เป็นศูนย์ในกรณีที่การติดตั้งล้มเหลว มิฉะนั้นinstall.packagesข้อผิดพลาดใด ๆ ที่เป็นเพียงการเตือน
rvernica


21

คุณต้องใช้?Rscriptคำสั่งเพื่อรันสคริปต์ R จากเทอร์มินัล

ตรวจสอบhttp://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

ตัวอย่าง

## example #! script for a Unix-alike

#! /path/to/Rscript --vanilla --default-packages=utils
args <- commandArgs(TRUE)
res <- try(install.packages(args))
if(inherits(res, "try-error")) q(status=1) else q()

นี่เป็นเพียงตัวอย่างของวิธีที่คุณจะเขียน / เรียกใช้สคริปต์ R ในไฟล์ของคุณให้เพิ่ม #! / path / to / rscript จากนั้น chmod + x <your script.r> และ ./<your script.r>
Mehul Rathod

10

วิธีรัน Rmd ในคำสั่งด้วย knitr และ rmarkdown ด้วยคำสั่งหลายคำสั่งจากนั้นอัปโหลดไฟล์ HTML ไปยัง RPubs

นี่คือตัวอย่าง: โหลดสองไลบรารีและรันคำสั่ง R

R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'

3
โปรดทราบว่าการข้ามการโหลดไลบรารีจะง่ายกว่า R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane

3

อีกวิธีหนึ่งในการใช้ Rscript สำหรับระบบ * Unix คือการทดแทนกระบวนการกระบวนการชดเชย

Rscript <(zcat a.r)
# [1] "hello"

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

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"

คล้ายกับRscript -e "Rcode"มันยังอนุญาตให้เรียกใช้โดยไม่บันทึกลงในไฟล์ ดังนั้นจึงสามารถใช้ร่วมกับสคริปต์ที่สร้าง R-code ได้เช่น:

Rscript <(echo "head(iris,2)")
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa

3

สำหรับเอกสารประกอบบางครั้งคุณต้องเรียกใช้สคริปต์เป็นsudo:

sudo Rscript path/to/your/file.R

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