【问题标题】:Suppress comment (#) when eval=FALSE in RMarkdown当 RMarkdown 中的 eval=FALSE 时禁止注释 (#)
【发布时间】:2014-06-14 18:26:35
【问题描述】:

我想使用一个冗长的数据框,但只在我的幻灯片中显示它的一部分。

```{r}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df1
```

正如您可能猜到的那样,这会产生不适合演示幻灯片的输出。

```{r eval=-2, echo=-3}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df1
head(df1)
```

这会产生:

df1 = data.frame(x = rnorm(100), y = rnorm(100))
## df1

x       y
1  0.7699 -0.1683
2 -0.4756  0.3885
3 -0.6744  1.2755
4 -0.8533 -2.1271
5 -1.9129 -1.2661
6 -0.4567  0.5607

但我不希望第二个代码行被注释掉。目前,我能想到的唯一方法是在两个单独的代码块中,因为eval=FALSE 在应用于整个代码块时不会导致注释代码。

这会产生我想要的:

```{r eval=FALSE}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df1
```

```{r echo=FALSE}
df1 = data.frame(x = rnorm(100), y = rnorm(100))
head(df1)
```

但显然,如果我更改代码,我必须在两个地方进行更改。这是一个简单的示例,但对于更复杂的代码,我的代码和结果在我编辑它时变得不同步的风险更大。

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    试试这个:

    ```{r include = FALSE}
    library(knitr)
    op <- knit_hooks$get()$source
    knit_hooks$set(source = function(x, options) op(if(is.numeric(options$eval)) x[options$eval] else x, options))
    ```
    
    ```{r eval=-2, echo=-3}
    df1 = data.frame(x = rnorm(100), y = rnorm(100))
    df1
    head(df1)
    ```
    

    这适用于简单的情况,但如果要结合echoeval,则需要进行改进。

    【讨论】:

    • 不太了解 knitr,所以我很难跟踪您创建的函数的逻辑。当我测试该块时,eval=-2 按预期工作,但echo=-3 的行为类似于echo=-c(2, 3)。如果我将其翻转以列出应该(而不是不应该)使用{r eval=c(1, 3), echo=c(1, 2)} 评估/回显的行,则第二行显示为NA 而不是df1(所需目标)或@ 987654330@(旧的、不受欢迎的行为。
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2015-05-23
    • 2010-10-10
    • 2017-08-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多