2017-08-23 90 views
1

我正在使用我的筆記本電腦和雲設備來處理數據集。我只想在雲上工作時計算一些「計算量大」的代碼塊。有條件地執行代碼段

到目前爲止,我選擇了一個不是很優雅的方式來做到這一點。我已將##OPT##前綴添加到我只想在雲中執行的部分。然後,我只需刪除這些前綴並在雲中運行腳本。

現在我的問題:有沒有一種方法可以在腳本的開始處選擇是否執行這些段,然後在參數設置爲「false」時跳過這些段?如果條件允許,我嘗試過,但這非常麻煩。

+3

你可以使用簡單的'if'語句,在你的腳本開始處設置爲TRUE/FALSE,即'in_cloud < - TRUE',然後'if(in_cloud){...}' –

+0

或者你可以創建兩個獨立的腳本:local.R&cloud.R,並找到合適的腳本。 – Prometheus

+0

假設你的筆記本電腦是Windows,我們可以這樣做:'if(Sys.info()[「sysname」]!=「Windows」){...一些heave代碼...} – zx8754

回答

3

爲了進一步說明docendo discimus的評論,只是在你的腳本的開頭定義參數:

execpart <- TRUE #and change to FALSE if you don't want to execute 

然後換你的腳本,只應在situationally執行的整個部分:

if(execpart){ 
## your script 
} 

你甚至可以在開始時爲腳本的不同部分定義多個參數。這會讓您選擇通過幾個簡單的更改來設置腳本的執行。

請注意,if查找TRUE/FALSE,因此您無需在if條件中指定(execpart == TRUE)條件。

+1

這個問題說明他們已經嘗試過if語句,並發現它們非常繁瑣。我假設他們正在尋找替代解決方案。不過,我同意這可能是最簡單的方法。 – Eumenedies

+3

是的,我認爲他們以某種方式過度複雜的方式使用了'if',因爲這種解決方案既不花費太多時間也不需要很多代碼。 – LAP

+2

我還是R的初學者,並且在每行代碼中添加了'if'條件。這個版本與'if(){}'是完美的,正是我想要的! – deca

2

如果您在RStudio中使用R筆記本,則可以在文檔中的不同代碼塊中包含不同的代碼。代碼塊的定義如下:

```{r} 
"hello world!" 
``` 

這樣做可以讓您非常輕鬆地只運行要運行的塊。另外,如果你想運行所有的塊,你可以這樣做。

任何給定的塊都擁有一個名爲eval的選項,它決定了它們是否應該運行。這可以從表達式取一個值,所以你基本上可以這樣做:

```{r label} 
is_cloud <- FALSE #or TRUE 
``` 

```{r conditional, eval = is_cloud} 
"hello world!" 
``` 

且僅當is_cloudTRUE塊將被執行。