2012-11-08 44 views
2

在塊中運行系統調用後,如何讓knitr解除掛起?例如:掛在系統上的Knitr()調用

\documentclass{article} 

\begin{document} 
Test 

<<>>= 
system('"C:\\Program Files\\SASHome\\SASFoundation\\9.3\\sas.exe" "test.sas"') 
@ 

\end{document} 

此代碼只是永遠掛起。順便說一下,上面的R代碼運行良好。謝謝。

+0

FWIW,運行代碼(但在'系統代(「打開Firefox」)')的作品只是對於我來說足夠了。你是否玩過大塊選項,設置'cache = FALSE','results =「hide」'等等? –

+0

感謝喬希,我已經嘗試了很多不同的針織大塊選項,但它仍然不起作用。指揮系統(「開放式火狐」)也適用於我,以及系統(「開放式」)。這個問題似乎是在主機程序中知道子程序何時停止運行重新啓動原始程序流。 –

+0

從我的結局中犯了個愚蠢的錯誤。我需要指定目標代碼的目錄,我認爲.Rnw代碼在pwd中運行,但它實際上將.Rnw根目錄作爲pwd引用。還發現可以使用\ write18 {「C:/ Program Files/SASHome/SASFoundation/9.3/sas.exe」「C:/dir/test.sas」}直接在tex代碼中運行命令。 –

回答

3

默認情況下,代碼塊的工作目錄是源文檔的目錄(在本例中爲Rnw doc),因此test.sas必須與Rnw文件位於同一目錄下。

或者您可以使用opts_knit$set(root.dir = '/path/to/desired/dir/')指定代碼塊的工作目錄。

knitr

SAS支持已被添加到development version,這是你可以做什麼:

<<engine='sas', engine.path="C:\\Program Files\\SASHome\\SASFoundation\\9.3\\sas.exe">>= 
/* write the content of your test.sas here */ 
@