2013-10-10 35 views
5

我有一個製表符分隔的文本文件,我試圖使用read.table函數加載到R中。腳本的前幾行看起來像這樣read.table函數和標準輸入

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

這是有效的。我原本試圖讓R從標準輸入中讀取數據,但沒有成功。我的第一種方法...

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

......似乎並沒有工作。我的第二個辦法......

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

...讀取數據文件,但(由於某種原因,我不明白)第20行左右錯位得到,這是一個很大的問題(特別是因爲這些線路包含標題信息)。有沒有辦法讓read.table從標準輸入中讀取?我錯過了一些完全明顯的東西?

回答

9

?stdin說:

stdin()指的是「控制檯」,而不是到C級「標準輸入」的過程中 。 GUI控制檯中的區別很重要(其中 可能沒有活動的「標準輸入」,如果他們這樣做可能不是 連接到控制檯輸入),也可能在嵌入式應用程序中。 如果您想要訪問C級文件流「stdin」,請使用 file("stdin")

和:

當R從文件中讀劇本時,文件是 「控制檯」:這是傳統的使用,允許在聯機數據...

這是觀察到的行爲的可能原因。 原則上可以read.table從標準輸入 - 但在大多數(幾乎所有?)的情況下,你會想通過file('stdin')做到這一點。

+0

太棒了。文件(「標準輸入」)而不是標準輸入()或「/ dev /標準輸入」做的伎倆。 –