2013-10-10 24 views
5

read.table işleviyle R'ye yüklemeye çalıştığım bir sekme ile ayrılmış metin dosyası var. Komut dosyasının ilk birkaç satırı şu şekilde görünür:read.table işlevi ve stdin

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

Bu, çalışır. Orijinal olarak R girdisini standart girdiden okuyabilmek için denedim, ancak başarısız oldu. Benim ilk yaklaşım ...

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

... hiç işe görünmüyordu. büyük bir sorun (My İkinci yaklaşım ...

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

... ilk 20 ya da öylesine hatları, parçalanmış olsun veri dosyası okumak ama (nedense ben anlamıyorum) özellikle hatlar beri başlık bilgilerini içerir). Standart girişten okumak için read.table almanın bir yolu var mı? Tamamen açık bir şey eksik miyim?

cevap

9

?stdin söyler:

stdin()

C düzeyi ‘Standart girdi’ işlem için uçbirimdeki olup belirtmektedir. GUI konsollarındaki ( 'un etkin bir "stdin" değeri olmayabilir ve eğer yaparlarsa konsol girişine bağlı olmayabilir) ve ayrıca gömülü uygulamalarda. C düzeyinde dosya akışı ‘stdin’ dosyasına erişmek istiyorsanız, file("stdin")'u kullanın.

Ve:

R, bir dosyadan senaryoyu okuyor, dosya 'konsol' şudur: Bu sıralı verilere izin geleneksel kullanımını olduğunu ...

Gözlemlenen davranışların olası nedeni budur. numaralı Prensipte , standart giriştenread.table numaralı telefonu alabilir, ancak çoğu (neredeyse tümü?) Durumda, bunu file('stdin') aracılığıyla yapmak istersiniz.

+0

Parlak. stdin() veya "/ dev/stdin" yerine dosya ("stdin") hile yaptı. –