Jalankan skrip R dari baris perintah

484

Saya punya file, bernama a.r, memiliki chmod755,

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

sayHello()

Bagaimana saya bisa menjalankan ini melalui command-line?

Sait
sumber
3
Kemungkinan duplikat Apa cara terbaik untuk menggunakan skrip R pada baris perintah?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5
tl; dr: tambahkan saja baris pertama skrip Anda:#!/usr/bin/env Rscript
michael

Jawaban:

671

Jika Anda ingin hasilnya dicetak ke terminal, yang terbaik adalah menggunakan Rscript

Rscript a.R

Perhatikan bahwa ketika menggunakan R CMD BATCH a.Ritu alih-alih mengarahkan output ke standar keluar dan menampilkan pada terminal file baru yang disebut a.Rout akan dibuat.

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

Satu hal lain yang perlu diperhatikan tentang penggunaan Rscript adalah bahwa ia tidak memuat methodspaket secara default yang dapat menyebabkan kebingungan. Jadi, jika Anda mengandalkan apa pun yang disediakan metode, Anda ingin memuatnya secara eksplisit dalam skrip Anda.

Jika Anda benar-benar ingin menggunakan ./a.Rcara memanggil skrip, Anda dapat menambahkan yang sesuai #!ke bagian atas skrip

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

sayHello()

Saya juga akan mencatat bahwa jika Anda menjalankan sistem * unix ada paket littler yang berguna yang menyediakan pemipaan baris perintah mudah ke R. Mungkin perlu menggunakan littler untuk menjalankan aplikasi yang mengkilap melalui skrip? Rincian lebih lanjut dapat ditemukan dalam pertanyaan ini .

Alasan
sumber
28
Tanpa #! baris perintah Anda mencoba menjalankannya sebagai skrip baris perintah, menggunakan penerjemah yang sama yang menginterpretasikan perintah Anda. Itu tidak tahu itu seharusnya R, bahkan jika file berakhiran akhiran .R atau .r. #! memberitahu baris perintah bahasa apa yang terkandung dalam file.
Spacedman
4
Saya menangkap beberapa pertanyaan di sini selama bertahun-tahun dan dapat merujuk pada littler dan Rscript. Hal utama adalah memberi tahu orang, seperti yang Anda lakukan, itu R CMD BATCHmengerikan. Apa pun kecuali itu ...
Dirk Eddelbuettel
@ Alasan saya juga bekerja dengan skrip R dan saya mencoba untuk mengeksekusi skrip R dari program Java dan saya melihat beberapa kesalahan. Ini pertanyaan saya . Lihat apakah Anda dapat membantu. Saya menggunakan contoh fungsi halo Anda untuk sekarang agar lebih mudah.
user1950349
Apakah ada cara untuk memodifikasi jalur pustaka dalam perintah itu sendiri? Sesuatu yang mirip denganR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes
@mikemtnbikes Bukan yang saya tahu. Orang selalu dapat menambahkan sesuatu untuk mengubah .libPaths () di dalam skrip. Tapi saya tidak melihat opsi seperti yang ditunjukkan di halaman manual untuk Rscript.
Dason
107

Ini tidak menjawab pertanyaan secara langsung. Tetapi seseorang mungkin berakhir di sini karena mereka ingin menjalankan oneliner R dari terminal. Misalnya, jika Anda hanya ingin menginstal beberapa paket yang hilang dan berhenti, oneliner ini bisa sangat nyaman. Saya sering menggunakannya ketika tiba-tiba mengetahui bahwa saya kehilangan beberapa paket, dan saya ingin menginstalnya ke tempat yang saya inginkan.

  • Untuk menginstal ke lokasi default:

    R -e 'install.packages(c("package1", "package2"))'
  • Untuk menginstal ke lokasi yang memerlukan roothak istimewa:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 
biocyberman
sumber
5
Untuk menjalankan perintah, Anda juga bisa menggunakan Rscript -e "getwd()"terminal. Rscript hanya akan mencetak output perintah dan bukan pesan startup R penuh.
Paul Rougieux
Anda juga dapat menggunakan r -e "cat(getwd(),'\n')"jika Anda menginstal littler. Dalam jawaban ini Dirk Eddelbuettel menjelaskan perbedaan antara littler dan Rscript.
Paul Rougieux
2
Terima kasih telah mengantisipasi masalah saya! Saya membutuhkan satu hal lagi:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin
4
Orang harus menggunakan R -r 'options(warn=2); install...'untuk menghentikan eksekusi dan mendapatkan kode kesalahan tidak nol jika instalasi gagal. Kalau tidak, install.packageskesalahan apa pun hanyalah peringatan.
rvernica
21

Anda memerlukan ?Rscriptperintah untuk menjalankan skrip R dari terminal.

Lihat http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

Contoh

## 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()
Mehul Rathod
sumber
Ini hanyalah sebuah contoh bagaimana Anda akan menulis / menjalankan skrip R, dalam file Anda tambahkan #! / Path / ke / rscript dan kemudian chmod + x <script.r> dan ./< script Anda.r>
Mehul Rathod
10

Cara menjalankan perintah Rmd dengan knitr dan rmarkdown dengan beberapa perintah, lalu Unggah file HTML ke RPubs

Berikut ini contohnya: memuat dua pustaka dan menjalankan perintah R

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

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'
Shicheng Guo
sumber
3
Perhatikan bahwa akan lebih mudah untuk melewati pemuatan perpustakaan; R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane
3

Namun cara lain untuk menggunakan Rscript untuk * sistem Unix adalah Proses Substitusi .

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

Yang jelas melakukan hal yang sama dengan jawaban yang diterima, tetapi ini memungkinkan Anda untuk memanipulasi dan menjalankan file Anda tanpa menyimpannya kekuatan dari baris perintah, misalnya:

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

Mirip Rscript -e "Rcode"dengannya juga memungkinkan untuk berjalan tanpa menyimpan ke dalam file. Jadi itu bisa digunakan bersamaan dengan skrip yang menghasilkan R-code, misal:

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
Sebastian Müller
sumber
3

Hanya untuk dokumentasi, terkadang Anda perlu menjalankan skrip sebagai sudo:

sudo Rscript path/to/your/file.R
Cro-Magnon
sumber
2
Kapan Anda perlu melakukan itu?
simplegamer