Подтвердить что ты не робот

Как получить название куска в knitr?

Я хочу установить опцию chunk "eval" на основе списка имен фрагментов. Есть ли функция, чтобы получить имя куска в knitr, например. chunk_name?

Это мой минимальный пример с именем поддельной функции "chunk_name".

---
output: html_document
---

```{r setup}
eval_chunks <- c('chunk1')
```

```{r chunk1, eval=chunk_name() %in% eval_chunks}
plot(cars)
```


```{r chunk2, eval=chunk_name() %in% eval_chunks}
plot(cars)
```

Спасибо за любые предложения. Пожалуйста, дайте мне знать, если мой вопрос не ясен.

4b9b3361

Ответ 1

Knitr предоставил ярлыки внутри куска с 2012 года (нужно больше Google, https://github.com/yihui/knitr/issues/73).

Это мой пример файла Rmd:

---
output: html_document
---

```{r setup}
library(knitr)
eval_chunks <- c('chunk1', 'chunk3')
```

```{r chunk1, eval=opts_current$get("label") %in% eval_chunks}
print(opts_current$get("label"))
```


```{r chunk2, eval=opts_current$get("label") %in% eval_chunks}
print(opts_current$get("label"))
```


```{r chunk3, eval=opts_current$get("label") %in% eval_chunks}
print(opts_current$get("label"))
```

Ответ 2

Я думаю, что это решение несовершенно, потому что оно требует некоторой осторожности, чтобы удостовериться, что правильные куски оценены, но он сталкивается с проблемой, что параметры куска оцениваются до вызова крючков. Короче говоря, он не использует крючок, но вместо этого использует тот факт, что параметры chunk могут быть R-выражениями. В этом случае используется функция e(), которая полагается на глобальную переменную счетчика, чтобы определить, следует ли оценивать конкретный кусок. Поскольку куски оцениваются по порядку, это работает. В приведенном ниже примере оцениваются значения chunk1 и chunk3, а остальные - нет.

---
output: html_document
---

```{r setup}
library("knitr")
.i <- 2 # `setup` is the first chunk, so start at 2
.x <- all_labels() %in% c("chunk1", "chunk3")
e <- function(){
    d <- .x[.i]
    .i <<- .i + 1
    d
}
```

```{r chunk1, eval=e()}
x <- 1
x
```

```{r chunk2, eval=e()}
x <- 2
x
```

```{r chunk3, eval=e()}
x <- 3
x
```

```{r chunk4, eval=e()}
x <- 4
x
```