Saya telah menggunakan R CMD BATCH my_script.R
dari terminal untuk menjalankan R
skrip. Saya sekarang pada titik di mana saya ingin menyampaikan argumen ke perintah, tetapi mengalami beberapa masalah untuk membuatnya bekerja. Jika saya lakukan R CMD BATCH my_script.R blabla
maka blabla
menjadi file output, daripada diinterpretasikan sebagai argumen yang tersedia untuk skrip R.
Saya telah mencoba Rscript my_script.R blabla
yang tampaknya diteruskan blabla
dengan benar sebagai argumen, tetapi kemudian saya tidak mendapatkan my_script.Rout
file output yang saya dapatkan R CMD BATCH
(saya ingin .Rout
file tersebut). Meskipun saya dapat mengarahkan output dari panggilan ke Rscript
nama file yang saya pilih, saya tidak akan mendapatkan perintah input R yang disertakan dalam file seperti R CMD BATCH
halnya di .Rout
file.
Jadi, idealnya, saya mencari cara untuk mengirimkan argumen ke skrip R yang dieksekusi melalui R CMD BATCH
metode, meskipun akan senang dengan pendekatan yang digunakan Rscript
jika ada cara untuk membuatnya menghasilkan .Rout
file yang sebanding .
R CMD BATCH
sebagai peninggalan. Hal yang saya suka tentang itu adalah bahwa ia menghasilkan.Rout
file yang tidak hanya menyertakan output skrip, tetapi juga menyisipkan perintah input / komentar dari.R
file skrip yang menghasilkan output itu.R CMD BATCH
.R CMD BATCH
denganknitr
, misalnyaRscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(Anda dapat menggantistitch
denganstitch_rhtml
ataustitch_rmd
, dan Anda perlu menginstalknitr
dari Github karena saya baru saja menemukan bug distitch
...)Rscript myfile.R > path/to/mylog.Rout
dan alih-alih dicetak ke stdout (layar), output dari file disimpan dalam.Rout
file Anda .Rscript myfile.R | tee mylog.Rout
Setelah mencoba opsi yang dijelaskan di sini, saya menemukan posting ini dari Forester di r-blogger. Saya pikir ini adalah pilihan bersih untuk dipertimbangkan.
Saya meletakkan kodenya di sini:
Dari baris perintah
Test.R
Dalam test.out
Terima kasih untuk Forester !
sumber
--args
adalah kuncinya. Ini juga bekerja denganR --no-save --no-restore --args a=1 < test.R
danR --no-save --no-restore < test.R --args a=1
Dalam skrip R Anda, disebut
test.R
:Dari baris perintah, jalankan:
File keluaran Anda, test.Rout, akan menunjukkan bahwa argumen
4
telah berhasil diteruskan ke R:sumber
Anda perlu meletakkan argumen sebelumnya
my_script.R
dan menggunakan-
argumen, misalnyacommandArgs()
akan menerima-blabla
sebagai string karakter dalam kasus ini. Lihat bantuan untuk detailnya:sumber
args <- commandArgs(FALSE)
dan kemudian mencetak args, saya berakhir dengan semua argumen, termasuk mereka yang bukan milikku, seperti--restore
,--save
, dll Jika saya menggunakancommandArgs(TRUE)
saya mendapatkan tidak ada argumen sama sekali. Apakah ada cara untuk mendapatkan argumen tambahan saya sendiri?--args
terlihat menjanjikan, tapi saya belum bisa membuatnya bekerja ...Saya menambahkan jawaban karena menurut saya solusi satu baris selalu bagus! Di atas
myRscript.R
file Anda , tambahkan baris berikut:Kemudian kirimkan naskah Anda dengan sesuatu seperti:
Sebagai contoh:
Kemudian:
sumber
Berikut cara lain untuk memproses argumen baris perintah, menggunakan
R CMD BATCH
. Pendekatan saya, yang dibangun di atas jawaban sebelumnya di sini , memungkinkan Anda menentukan argumen pada baris perintah dan, dalam skrip R Anda, memberikan beberapa atau semuanya nilai default.Ini file R, yang saya beri nama test.R :
Di baris perintah, jika saya mengetik
maka dalam R kita akan memiliki
a
=2
danb
=c(2,5,6)
. Tetapi saya bisa, mengatakan, menghilangkanb
, dan menambahkan argumen lainc
:Kemudian di R kita akan memiliki
a
=2
,b
=c(1,1,1)
(default), danc
="hello"
.Akhirnya, untuk kenyamanan kita bisa membungkus kode R dalam sebuah fungsi, selama kita berhati-hati dengan lingkungannya:
sumber