Sangat mudah memiliki skrip R untuk melakukan plot sederhana dari baris perintah. Namun, menjalankan R dari skrip bash sama sekali tidak nyaman. Idealnya mungkin seperti itu
#!/path/to/R
...
atau
#!/usr/bin/env R
...
tapi saya belum bisa melakukan salah satu dari itu.
Pilihan lainnya adalah mempertahankan skrip murni di R, misalnya script.R
, dan menjalankannya dengan R --file=script.R
atau serupa. Namun, terkadang skrip akan mengandalkan sakelar baris perintah yang tidak jelas di mana bagian titik kode berada di luar skrip. Contoh: menyelinap ke R dari bash melalui profil .R lokal, sakelar yang diinginkan kemudian semuanya --vanilla
tersirat kecuali --no-init-file
.
Pilihan lainnya adalah skrip bash untuk menyimpan bendera R dan dapat dieksekusi tanpa rasa sakit, yang kemudian memanggil skrip R. Masalahnya adalah ini berarti satu program baru saja dipecah menjadi dua file yang sekarang harus tetap sinkron, ditransfer ke mesin baru bersama-sama, dll.
Opsi yang paling tidak saya benci saat ini adalah menyematkan R dalam skrip bash:
#!/bin/bash
... # usage message to catch bad input without invoking R
... # any bash pre-processing of input
... # etc
R --random-flags <<RSCRIPT
# R code goes here
RSCRIPT
Semuanya ada dalam satu file. Ini dapat dieksekusi dan dengan mudah menangani argumen. Masalahnya adalah bahwa menggabungkan bash dan R seperti ini cukup banyak menghilangkan kemungkinan IDE tidak gagal di satu atau yang lain, dan membuat hati saya sangat sakit.
Adakah cara yang lebih baik yang saya lewatkan?
Rscript --help
dari baris perintah akan mencantumkan banyak opsi berguna yang dapat ditambahkan ke shebang, seperti--vanilla
.commandArgs
fungsigetopt
danoptparse
paket dan untuk mengurai baris perintah. Sehingga argumen dan opsi juga dapat diteruskan ke skrip Anda saat dijalankan dari baris perintah.#!/usr/bin/Rscript
(yang bukan merupakan praktik standar untuk skrip R).Coba lebih kecil .
littler
menyediakan kemampuan hash-bang (yaitu skrip yang dimulai dengan #! / some / path) untuk GNU R, serta penggunaan baris perintah dan perpipaan sederhana.sumber
Tanggapan Miguel Sanchez adalah sebagaimana mestinya. Cara lain menjalankan Rscript bisa menjadi perintah 'env' untuk menjalankan RScript seluruh sistem.
sumber
env
akan memungkinkan Anda untuk menjalankan pertamaRscript
ditemukan di Anda sendiri$PATH
, sehingga memungkinkan satu untuk benar-benar menjalankan sesuatu yang lain daripada sistem-lebar / defaultRscript
(yang mungkin tidak dipasang di/usr/whatever
). Saya akan merekomendasikan penggunaanenv
forR
andRscript
stuff, karena ini khususnya mungkin tidak dipasang di tempat standar. (bash
Namun skrip biasa biasanya dapat selalu digunakan dengan aman#!/bin/bash
.)/bin/sh
. Yang lainnya harus menggunakanenv
pencarian. Secara khusus, lebih sering daripada tidak Bash ketinggalan zaman pada cluster komputasi dan pengguna memiliki instalasi khusus mereka sendiri (biasanya dalam~/.local/bin
, atau dibagikan dalam sesuatu seperti/software
mount NFS). Demikian juga, di MacOS,/bin/bash
yang selalu ketinggalan jaman karena lisensi masalah, dan up to date Bash lebih sering berada di/usr/local/bin/bash
(saya menyadari komentar Anda berusia 3 tahun tapi ini cukup penting.)/bin/sh
, dalam keadaan apapun, tidak juga "berbahaya", maka Anda harus mengakui hal yang sama bisa dikatakan/bin/bash
. Penggunaanenv
lebih tidak dapat diprediksi, karenaPATH
pengaturan yang dapat diandalkan / tidak konsisten untuk pengguna yang berbeda, tetapi setiap pengguna R mungkin benar-benar menginginkan perilaku ini, sedangkanbash
skrip tidak. Terakhir, untuk CI / cloud yang menjalankan skrip bash yang lebih baru, cukup panggil mereka menggunakan/path/to/my/bash myscript
atau setel jalurnya secara eksplisit & panggil mereka menggunakanenv script
. EOT#!/path/to/R
tidak akan berfungsi karena R itu sendiri adalah skrip, jadiexecve
tidak bahagia.saya menggunakan
R --slave -f script
sumber
Rscript
(danlittler
), jika Anda bertanya-tanya.Jika Anda tertarik untuk mengurai argumen baris perintah ke skrip R, coba RScript yang dibundel dengan R pada versi 2.5.x
http://stat.ethz.ch/R-manual/R-patched/library/utils/html/Rscript.html
sumber
Ini bekerja,
tetapi saya tidak tahu apa yang terjadi jika Anda memiliki lebih dari 1 versi R yang diinstal pada mesin Anda.
Jika Anda melakukannya seperti ini
itu memberitahu penerjemah untuk hanya menggunakan apapun R muncul pertama kali di jalan Anda.
sumber
Jika program yang Anda gunakan untuk menjalankan skrip Anda membutuhkan parameter, Anda dapat meletakkannya di akhir #! baris:
Tidak mengetahui R, saya tidak dapat menguji dengan benar, tetapi ini sepertinya berhasil:
sumber
Hanya sebuah catatan untuk ditambahkan ke posting ini. Versi yang lebih baru
R
tampaknyaRscript
agak terkubur . Untuk R 3.1.2-1 di OSX yang diunduh Jan 2015 saya temukanRscript
diJadi, alih-alih sesuatu seperti
#! /sw/bin/Rscript
, saya perlu menggunakan yang berikut di bagian atas skrip saya.The
locate Rscript
mungkin membantu Anda.sumber
#!/usr/bin/env Rscript
alih-alih jalur kode keras dalamR
skrip (dan menambahkan jalur panjang itu ke Anda$PATH
)Anda mungkin ingin menggunakan modul rpy2 python. Namun, cara yang "benar" untuk melakukannya adalah dengan R CMD BATCH. Anda dapat memodifikasi ini untuk menulis ke STDOUT, tetapi defaultnya adalah menulis ke file .Rout. Lihat contoh di bawah ini:
Catatan: Anda akan ingin mencoba --vanilla dan opsi lain untuk menghapus semua cruft startup.
sumber
Coba smallR untuk menulis skrip R cepat di baris perintah:
http://code.google.com/p/simple-r/
(
r
perintah di direktori)Membuat plot dari baris perintah menggunakan smallR akan terlihat seperti ini:
sumber
littler
pasti lebih disukai (karena masih hidup); atau, cukup gunakanRscript
(yang benar-benar keluar setelahlittler
dibuat.)Berikut ini adalah cara bekerja untuk saya menggunakan MSYS bash di Windows - Saya tidak memiliki R di kotak Linux saya jadi tidak dapat mencobanya di sana. Anda membutuhkan dua file - yang pertama disebut runr mengeksekusi R dengan parameter file
Anda perlu membuat ini dapat dieksekusi dengan chmod + x runr .
Kemudian di file skrip Anda:
Perhatikan #! runr line mungkin perlu menyertakan path lengkap ke runr, bergantung pada bagaimana Anda menggunakan perintah, bagaimana variabel PATH Anda diatur, dll.
Tidak cantik, tapi sepertinya berhasil!
sumber