2013-04-14 81 views
3

我有以下兩種從標準輸入讀取的方式。但使用source()的方法不起作用。有誰知道如何使source()方法工作?謝謝。如何獲取讀取標準輸入的R腳本

~$ cat main.sh 
#!/usr/bin/env bash 

set -v 
cat main.csv | Rscript main.R 
cat main.csv | R -q --vanilla <<EOF 
source('main.R') 
EOF 
~$ cat main.R 
f=read.csv(file('stdin')) 
f 
~$ ./main.sh 
cat main.csv | Rscript main.R 
> f=read.csv(file('stdin')) 
> f 
    X V1 V2 
1 1 1 11 
2 2 2 12 
3 3 3 13 
4 4 4 14 
5 5 5 15 
6 6 6 16 
7 7 7 17 
8 8 8 18 
9 9 9 19 
10 10 10 20 
> 
cat main.csv | R -q --vanilla <<EOF 
source('main.R') 
EOF 
Error in read.table(file = file, header = header, sep = sep, quote = quote, : 
    no lines available in input 
Calls: source ... withVisible -> eval -> eval -> read.csv -> read.table 
Execution halted 

回答

3

這工作:

cat main.csv | R -q --vanilla -e 'source("main.R")' 

其中main.R最後一行已被替換

print(f)