在R中的knitr代码块中使用数据集名称

问题描述 投票:0回答:1

如何在 knitr 文档中使用数据集名称?

例如,在以下 knitr 代码块中,使用

deparse(substitute(x))
(通常在非 knitr R 代码中工作)不会显示 knitr HTML 子文档中
New York
列表中的
Berlin
cities

    ```{r plot-data, results='asis'}

    cities <- list(New York, Berlin)

    res <- lapply(cities, function(x) {
      knitr::knit_child(
        text = c(
          '\n',
          '## `r deparse(substitute(x))`',
          '\n',
          '```{r, out.height="100%", out.width="100%"}',
          'some_plotting_function(x)',
          '```'
        ),
        envir = environment(),
        quiet = TRUE
      )
    })

    cat(unlist(res), sep = "\n")
    ```

也就是说,在##注释行中,输出的城市名称每个都显示为

X[[i]]
,而不是
New York
Berlin
。 (我想在每个部分调用
some_plotting_function()
之前使用城市名称作为部分标题。)

r dataset knitr
1个回答
0
投票

要实现在 HTML 子文档的节标题中正确显示城市名称的所需行为,您可以修改代码以将城市名称作为参数显式传递给子文档。 您可以这样做:


cities <- list("New York", "Berlin")

res <- lapply(cities, function(city) {
  knitr::knit_child(
    text = c(
      '\n',
      paste0('## ', city),
      '\n',
      '```{r, out.height="100%", out.width="100%"}',
      'some_plotting_function("', city, '")',
      '```'
    ),
    envir = environment(),
    quiet = TRUE
  )
})

cat(unlist(res), sep = "\n")

以下是我对上述代码所做的更改:

  1. 城市列表已更改为包含字符串而不是对象。
  2. 在“lapply”循环中,“city”用作循环变量而不是“x”。
  3. 城市名称作为字符串参数传递给子文档中的“some_plotting_function()”。 这将正确地将城市名称显示为编织 HTML 子文档中的章节标题。
© www.soinside.com 2019 - 2024. All rights reserved.