2016-02-09 120 views
2

我使用Rstudio一個script.R運行幾百行代碼,但什麼讓我很煩,有點比Matlab是,Rstudio控制檯保持機械顯示從我的腳本文件中的每個command line。有沒有辦法來防止這種情況發生?防止Rstudio控制檯命令

令人沮喪部分來了,當一個人使用sprintf()例如,該命令從腳本文件中的行混合起來使用控制檯sprintf()的程度。

最佳,

+1

採購腳本時沒有兩個選項:Source和Source with Echo?這聽起來像你正在點擊源與回聲。我總是點擊普通的Source並沒有看到腳本行。 – drhagen

+0

@drhagen:thx突出顯示與Echo的區別,儘管我沒有點擊任何一個。在編寫腳本時,我正在使用'ctrl + a',然後'f5'執行它。根據你的反饋,當我點擊普通的'Source'時,問題是'sprintf()'沒有出現在控制檯中。 – owner

+0

這是因爲sprintf不打印到命令行;它創建一個字符串。如果你一行一行地運行,REPL會爲了方便而打印出純粹的值(就像一個單純的'1 + 1'一樣),但是採集腳本不會這樣做,它只是丟棄它們。在這些'sprintf'周圍放置一個'print()'。 – drhagen

回答

4

ctrl+shift+S運行代碼。或者在script.R的右上方找到源碼,然後運行Source而不是Source with echo。而且,對於您要求印刷@Konrad Rudolph建議使用消息message("%f", pi)是最佳解決方案。

如果打印的消息是爲了跟蹤代碼的狀態這裏有一些有用的解決方案showing a status message in R

0

如果你只是想運行script.R嘗試使用source函數。

source("script.R") # assuming script.R is in your working directory. 

此函數將運行腳本而不顯示命令行中的所有內容。

+0

thx。不幸的是'source(「path/script.R」)'防止'sprintf()'在控制檯中被泄露。 – owner

+1

@owner這是故意的,'sprintf' *不應該打印到控制檯。改用'message'。 –

+0

@KonradRudolph:我通常使用'sprintf()'至少在'Matlab'中打印字符串。 fyi:'message()'也可以工作,雖然可以用R'默認警告'消息來產生混淆(在外觀上)。最好, – owner

1

像Matlab的sprintf,R的sprintf只創建一個字符串,它不會將其打印輸出*您必須顯式調用print功能,看什麼:

print(sprintf("%f", pi)) # prints 

一個普通sprintf正式創建一個字符串,然後丟棄它,因爲它沒有被保存到一個變量:

sprintf("%f", pi) # does nothing 

然而,這種爲你工作,因爲REPL(運行R代碼裏面的一行,時間在命令行)不服從該指令放棄不保存到變量的值,而是打印它們。這是使命令行更容易工作的一種便利方式。你可以輸入1+1並讓它打印2,即使R腳本通常會默默丟棄該值。

將文本打印到控制檯的其他功能是catmessage,它們各有輕微的不同。查看他們的幫助文件的使用。

*從技術上講,Matlab將打印任何未被;終止的語句的值,包括字符串。因此,如果沒有分號,那麼sprintf產生的字符串可能會被打印出來,儘管它不是直接由sprintf完成的,而是由Matlab的通用打印全部行爲行爲完成的。在我看來,這是一個奇怪的功能。

+0

在'Matlab'中測試:'sprintf('invalidate misunderstanding')'並且更新你的斷言。 – owner

+0

@owner在Matlab中測試:'1 + 2'。然後測試''使誤解失效'。你會看到它*還*打印了一些東西。然而,顯然「1 + 2」和「誤解」都不是「打印聲明」。 'sprintf'也是如此。 –

+0

@KonradRudolph:'char'類型的好點:) – owner