条件执行代码段

时间:2017-08-23 10:19:39

标签: r

我正在使用笔记本电脑和云设备处理数据集。我只想在云上工作时计算一些“计算量大”的代码块。

到目前为止,我选择了一种不太优雅的方式。我已将##OPT##前缀添加到我想要仅在云中执行的段中。然后我只需删除这些前缀并在云中运行脚本。

现在我的问题:是否有一种方法可以在脚本的开头选择是否执行这些段然后如果参数设置为“false”则跳过这些段?我试过if条件,但这非常麻烦。

3 个答案:

答案 0 :(得分:4)

如果在RStudio中使用R笔记本,则可以在文档中的不同代码块中包含不同的代码。代码块定义如下:

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

这样做可以让您轻松只运行要运行的块。此外,如果您希望运行所有块,则可以执行此操作。

任何给定的块都有一个名为eval的选项,它决定了它们是否应该运行。这可以从表达式中获取值,因此您基本上可以执行以下操作:

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

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

仅当is_cloudTRUE时才会执行块。

答案 1 :(得分:3)

要进一步解释docendo discimus的评论,只需在脚本的开头定义一个参数:

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

然后包装你的脚本的整个部分,这部分应该只在情境中执行:

if(execpart){
## your script
}

您甚至可以在开头为脚本的不同部分定义多个参数。这样您就可以选择通过一些快速更改来设置脚本的执行。

请注意,if会查找TRUE/FALSE,因此您无需在(execpart == TRUE)条件中指定if

答案 2 :(得分:0)

在RStudio R笔记本中很方便将好suggestion in another answer与使用&#34; params&#34;在笔记本标题中。 E.g:

---
title: params example
output: html_notebook
params:
  in_cloud: yes
---

This one always runs:
```{r}
print("hello always")
```

This one only runs when in_cloud is TRUE:
```{r, eval=params$in_cloud}
print("hello, cloud")
```

Conditional blocks also work for other engines (like bash):  
```{bash, eval=params$in_cloud}
echo "hello, cloud, from bash"
```