Отключить выполнение блока с переменной оценки R markdown

#r #r-markdown #eval

#r #r-markdown #оценка

Вопрос:

Я пытаюсь определить набор переменных для управления включением / выключением выполнения фрагментов в моем Rmarkdown. Однако я заметил, что с помощью variable1 = FALSE и {r chunk1, eval = variable1} фрагмент все равно будет выполняться (нажав кнопку «Запустить все фрагменты»). Для вязания этот подход работает, и фрагмент не будет оцениваться. Есть ли что-нибудь, что я пропустил.

Например, следующий Rmarkdown будет выполняться pressure1 и отображать давление с eval = varaible1 , но eval =FALSE сработал для pressure2 и отключит блок.

введите описание изображения здесь

 ---
title: "Untitled"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r switches, include=FALSE}
variable1 = FALSE
```

```{r cars}
summary(cars)
```

```{r pressure1, eval=variable1}
print("pressure1")
plot(pressure)
```

```{r pressure2, eval=FALSE}
print("pressure2")
plot(pressure)
```
  

Комментарии:

1. Я не могу воспроизвести вашу ошибку. Когда я запускаю его, я вижу фрагменты кода, которые включают print("pressure...") , но не вывод из них. Если вы хотите также скрыть их, подумайте eval=variable1, include=variable1 .

2. Иными словами, все три параметра фрагмента echo , include и eval ортогональны: первый определяет, видите ли вы код («ввод»); второй, чтобы увидеть код «вывод»; третий, если вы хотите, чтобы он вообще оценивался (что влияет include= , но побочным эффектом). Поскольку eval= также может быть числовым (какое выражение (выражения) оценивать), include= оно все равно может отличаться от неверного eval . (Источник: yihui.org/knitr/options/#code-evaluation )

3. @r2evans возможно, это не ошибка, и я пытаюсь понять причину. variable1=FALSE не отключил фрагмент pressure1 , и он все еще оценивается, выполняется, пожалуйста, смотрите обновленный снимок экрана.

4. Аналогично, если вы используете echo=FALSE , RStudio по-прежнему будет показывать вам код, поэтому поймите, что «записная книжка RStudio ! = среда рендеринга». Большая часть eval= , include= и eval= предназначена для автоматического рендеринга, а не для ручного.

5. RStudio игнорирует eval= , когда работает в ручном режиме ноутбука, поэтому … Нет. Однако, если вам известны условия, при которых код в фрагменте не должен выполняться, я предлагаю вам обернуть код фрагмента в простой if . Для надуманного примера, если код не должен выполняться, если не присутствует переменная и фрейм, то фрагмент может быть if (exists("someframe") amp;amp; inherits(someframe, "data.frame") amp;amp; nrow(someframe) > 0) { ...chunk_code_here... } .