Pertanyaan read.table function dan stdin


Saya memiliki file teks tab-delimited yang saya coba muat ke R dengan read.table fungsi. Beberapa baris pertama dari skrip terlihat seperti ini

#!/usr/bin/env Rscript
args <- commandArgs(trailingOnly=TRUE)
data <- read.table(args[1], header=TRUE, sep="\t", quote="")
# process the data

Ini bekerja. Saya awalnya mencoba untuk mendapatkan R untuk membaca data dari input standar, tetapi tidak berhasil. Pendekatan pertamaku ...

#!/usr/bin/env Rscript
data <- read.table(stdin(), header=TRUE, sep="\t", quote="")
# process the data

... sepertinya tidak berfungsi sama sekali. Pendekatan kedua saya ...

#!/usr/bin/env Rscript
data <- read.table("/dev/stdin", header=TRUE, sep="\t", quote="")
# process the data

... membaca file data tetapi (untuk beberapa alasan saya tidak mengerti) 20 baris pertama menjadi kacau, yang merupakan masalah besar (terutama karena garis tersebut berisi informasi header). Apakah ada cara untuk mendapatkannya read.table membaca dari input standar? Apakah saya kehilangan sesuatu yang sangat jelas?


5
2017-10-10 18:17


asal


Jawaban:


?stdin mengatakan:

stdin() mengacu pada ‘konsol’ dan bukan ke level-C ‘stdin’   dari proses. Perbedaan itu penting dalam konsol GUI (yang   mungkin tidak memiliki 'stdin' aktif, dan jika mereka melakukannya mungkin tidak   terhubung ke input konsol), dan juga dalam aplikasi yang disematkan.   Jika Anda ingin akses ke aliran file level-C 'stdin', gunakan    file("stdin").

Dan:

Ketika R sedang membaca skrip dari file, maka mengajukan adalah   ‘Konsol’: ini adalah penggunaan tradisional untuk memungkinkan data in-line ...

Itu adalah alasan yang mungkin untuk perilaku yang diamati. Pada prinsipnya kamu bisa  read.table dari masukan standar - tetapi di sebagian besar (hampir semua?), Anda ingin melakukan ini melalui file('stdin').


9
2017-10-10 18:23