2017-07-26 39 views
0

我試圖從system2調用的args將二進制的輸出轉換爲R對象。但是,我失敗了。我已經搜索了幾個選擇,如系統,exec_internal但不能正確。下面是一個使用Linux的功能‘因子’的玩具實例應該因式分解5555將system2的輸出傳遞給R對象

test_001 <- system2("factor", args=c("5555")) 

和在監視器上顯示的輸出被

5555: 5 11 101 

然而,我想有該結果進對象「test_001」。但是,如果我鍵入

test_001 

結果只有

[1] 0 

我真不明白如何從系統2輸出到R對象。謝謝你的幫助!

+1

你必須將stdout重定向到R.'test_001 < - system2(「factor」,args = c(「5555」),stdout = TRUE)'應該可以工作。 –

+0

@amatsuo_net請發佈這個答案。 –

回答

0

您必須通過指定stdout(可能還有etderr)選項來更改輸出的發送位置。由於system2的幫助指示默認輸出是R控制檯

其中輸出到'stdout'或'stderr'應該被髮送。可能的值是「」,R控制檯(缺省值),NULL或FALSE(放棄輸出),TRUE(捕獲字符向量中的輸出)或命名文件的字符串。

output = TRUE發送輸出爲R.字符矢量對象因此,對於您的情況,您可以:這確實

test_001 <- system2("factor", args=c("5555"), stdout = TRUE) 
0

感謝@amatsuo_net和@RomanLuštrik您的意見和解決方案的「標準輸出= TRUE」爲我的玩具例子工作!但是,它不適用於另一個類似的情況,我不明白爲什麼。在Linux和root中,我可以使用perf(https://perf.wiki.kernel.org)來檢查我的電腦的性能。從慶典,我想獲得監視器輸出成R命令的一組是:

perf stat -e instructions:u,cycles:u dd if=/dev/zero of=/dev/null count=100000 

如果我嘗試使用系統2

test_002 <- system2("perf", args=c("stat", "-e", "instructions:u,cycles:u", "dd if=/dev/zero of=/dev/null", "count=100000"), stdout = TRUE) 

調用帶參數的該命令從內部R作爲根我可以在我的顯示器上看到幾乎相同的結果。但是我仍然無法將它變成R對象。 「stdout = TRUE」在這裏也沒有幫助。 test_002的輸出如下所示:

character(0) 

爲什麼「stdout = TRUE」在這裏不起作用?