如何自动化RMD中的嵌套部分,包括文本、Map和表格

l5tcr1uw  于 2023-03-10  发布在  其他
关注(0)|答案(3)|浏览(136)

我找到了几个例子(How to extract the content of SQL-Files using RUse loop to generate section of text in rmarkdownAutomating the generation of preformated text in Rmarkdown using R),但没有一个能在我的例子中使用包含图形的嵌套部分。

看起来,我需要一些方法来处理包含的代码块(例如cat("```{r, fig.width=8.4, fig.height=7}\n") ... cat("```\n")),但我找不到方法。

编辑:我找到了此here,但仍无法使其工作

kexpand <- function(chunkname, fig.width, fig.height) {
  cat(knitr::knit(text = knitr::knit_expand(text = 
     sprintf("```{r %s, fig.width=%s, fig.height=%s}\n.chunk_code\n", 
             chunkname, fig.width, fig.height))))
}

然后在块中:

.chunk_code <- leaflet() %>%
    addTiles() %>%
    addProviderTiles(providers$OpenStreetMap, group = "OSM") %>%
    addProviderTiles(providers$Stamen.TonerLite, group = "Toner Lite") %>%
    addLayersControl(baseGroups = c("OSM", "Toner Lite")) %>%
    addCircleMarkers(lat = 47, lng = 9, popup = ranges[i])
  kexpand(i, 8.4, 7)

编辑2:有一个related question。虽然它看起来很接近,但仍然不起作用。另请参阅我的方法here,我使用它是因为我有嵌套列表-我不希望所有的图都彼此相邻。

所有部分都包含相同类型的数字,但内容当然有所变化。下面是

  • 我目前为止最好的
  • 引用Rmd,其中显示预期输出,但带有复制粘贴块

示例:
一个二个一个一个

来自xfun::会话信息('knitr')

R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200), RStudio 1.1.453

Locale:
  LC_COLLATE=German_Switzerland.1252  LC_CTYPE=German_Switzerland.1252    LC_MONETARY=German_Switzerland.1252
  LC_NUMERIC=C                        LC_TIME=German_Switzerland.1252    

Package version:
  evaluate_0.14   glue_1.2.0      graphics_3.5.1  grDevices_3.5.1 highr_0.7       knitr_1.23      magrittr_1.5   
  markdown_0.8    methods_3.5.1   mime_0.5        stats_3.5.1     stringi_1.2.3   stringr_1.3.1   tools_3.5.1    
  utils_3.5.1     xfun_0.7        yaml_2.1.19
bnl4lu3b

bnl4lu3b1#

试试这样

---
title: "The best I got"
author: "SQC"
date: "11 Juli 2019"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, fig.width=8.4, fig.height=7)
library(leaflet)
ranges <- paste0("section_", c(1:3))
leaflet()
DT::datatable(data.frame())

Title level 1

This is an R Markdown document.

Title level 2 (tab) {.tabset}

Title level 3 (tab) {.tabset}

for (i in 1:length(ranges)) {
  cat(paste0("#### Title level 4 `r ", 
             ranges[i], "` vs. `r ", ranges[i - 1], "` {.tabset}\n"))
  cat("##### Map\n")

  # code //
  cat("```{r, fig.width=8.4, fig.height=7}\n")
  leaflet() %>%
    addTiles() %>%
    knitr::knit_print() %>%
    cat()
  cat("```\n")
  # //

  cat("##### Tabelle\n")

  # code //
  cat("```{r}\n")
  DT::datatable(data.frame(x = 1, y = ranges[i], stringsAsFactors = FALSE),
                rownames = FALSE) %>%
    knitr::knit_print() %>%
    cat()
  cat("```\n")
  # //
}
qlfbtfca

qlfbtfca2#

我试图这样做的阴谋,但上述代码不为我工作。
然而,我查找了R-markdown cookbook,发现knit_child函数按预期工作。

```{r, results='asis'}
res <- knitr::knit_child(text = c(
  '```{r}',
  'plotly::plot_ly(x = rnorm(100))',
  '```'
), envir = environment(), quiet = TRUE)
cat(unlist(res), sep = '\n')
3zwtqj6y

3zwtqj6y3#

不知何故,这个问题得到了解答here
诀窍是使用tagList(html)

相关问题