我想了解在執行Rscript時從STDIN
讀取時會發生什麼情況。從stdin中讀取R時出現奇怪的行爲
首先,我有我要讀入R上的數據文件:
[email protected] testscripts # cat rdata
5 7
這是我第RSCRIPT,
a <- scan(file="stdin", what=integer(0), n=1);
b <- scan(file="stdin", what=integer(0), n=1);
導致此行爲:
[email protected] testscripts # Rscript ../rscripts/ttest.r < rdata
Read 1 item
Read 0 items
[email protected] testscripts # cat rdata | Rscript ../rscripts/ttest.r
Read 1 item
Read 0 items
在這一點上,我已經感到困惑,至於爲什麼只有一個值被讀取。我一直在試圖找到關於scan
函數的更多信息,但我找不到任何可以解釋這一點的內容。
如果我改變RSCRIPT爲以下,
sin <- file("/dev/stdin");
a <- scan(sin, what=integer(0), n=1);
b <- scan(sin, what=integer(0), n=1);
我得到這樣的結果,而不是:
[email protected] testscripts # Rscript ../rscripts/ttest.r < rdata
Read 1 item
Read 1 item
[email protected] testscripts # cat rdata | Rscript ../rscripts/ttest.r
Read 0 items
Read 0 items
這使我更加困惑,我的結果應該是等價的。最後,如果我嘗試這個命令:
[email protected] testscripts # cat rdata > tmp; Rscript ../rscripts/ttest.r < tmp
Read 1 item
Read 1 item
我得到預期的行爲。有人可以向我解釋發生了什麼事嗎?爲什麼R不能以流方式讀取數據?
嘗試使用'標準輸入()'來指向'stdin' – Andrie