#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... }
.