2013-08-28 56 views
2

我試圖繪製一個beeswarm情節(http://www.cbs.dtu.dk/~eklund/beeswarm/),我得到它的工作,現在我想寫一個小R腳本來自動化的東西。我想給這個R腳本的輸入是來自STDIN,我無法從STDIN讀取數據。如何在R腳本中讀取管道中的stdin?

這裏是我的[R腳本:

args <- commandArgs(TRUE) 
f1 <- args[1] 

plotbeeswarm <- function(output){ 
    library(beeswarm) 
    f <- read.table(stdin(), header=TRUE) 
    png(output, width=800, height=800) 
    beeswarm(Data ~ Category, data=f, pch=16, pwcol=1+as.numeric(sample), 
      xlab="") 
} 

plotbeeswarm(f1) 

我認爲是輸入文件是如何被讀取並處理到f中的問題。任何人都可以幫我修復我的代碼?非常感謝!

+0

不要忘記dev.of f() – baptiste

+0

你可能會覺得這很有用:http://stackoverflow.com/a/15785789/1201032 – flodel

+0

嘗試使用file()而不是stdin()。此外,read.table將讀取直到發送EOF,因此如果您正在讀取一堆數據,則腳本可能會掛起。 f < - read.table(file(「stdin」,r),header = TRUE) – BikerJared

回答

1

下面是一個例子,我在網頁上爲littler和使用,你應該能夠爲Rscript太適應:

腳本的代碼只是:

#!/usr/bin/r -i 

fsizes <- as.integer(readLines(file("stdin"))) 
print(summary(fsizes)) 
stem(fsizes) 

,我喂從ls -l成,由awk濾波的結果得到的只是一個文件大小的列:

[email protected]:~/svn/littler/examples$ ls -l /bin/ | awk '{print $5}' | ./fsizes.r 
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
     3 6240 30820 61810 60170 2000000  1 

    The decimal point is 5 digit(s) to the right of the | 

    0 | 00000000000000000000000000000000000111111111111111111111111122222222+57 
    1 | 111112222345679 
    2 | 7 
    3 | 1 
    4 | 1 
    5 | 
    6 | 
    7 | 
    8 | 
    9 | 6 
    10 | 
    11 | 
    12 | 
    13 | 
    14 | 
    15 | 
    16 | 
    17 | 
    18 | 
    19 | 
    20 | 0 

[email protected]:~/svn/littler/examples$ 
相關問題