gpt4 book ai didi

r - 使用循环在 rmarkdown 中生成文本部分

转载 作者:行者123 更新时间:2023-12-03 23:31:54 25 4
gpt4 key购买 nike

我需要生成一个由几个部分组成的报告,所有部分看起来都相似,只有一些数据不同。部分的数量也取决于数据。我最终想要的是这样的:

```{r}
section_names = c("A","B","C")
section_data = c(13,14,16)
```

# some looping mechanism here with variable i

This is section `r section_names[i]`

This section's data is `r section_data[i]`

#more things go here for the section

#end of loop should go here

结果应该是一个 html/document,所有部分一个接一个。

你能指出我用循环生成这样一个 Rmd 文件的方法吗?

理想情况下,我希望在 PHP 中看到类似的东西:
<$php for(i=0;i<10;i++) { ?>
## some html template + code chunks here
<$php } ?>

最佳答案

这个问题类似于 that one ,虽然它是基于 LateX/RNW 的。此外,this answer演示如何动态生成 rmarkdown 文档。但是,这两个问题都不是这个问题的完全重复。

基本上,有两个心理步骤可以采取:

  • 找出每个部分所需的 Markdown 标记。这可能类似于
    ## This is section <section_name>
    Section data is `<section_data>`.
    Additional section text is: <section_text>.
  • 编写生成此标记的 R 代码,将占位符替换为适当的值。

  • 对于第 2 步,使用 sprintf 是结合静态和动态文本的自然候选者。不要忘记使用 chunk options results = "asis"防止 knitr从将格式添加到您的输出并使用 cat (而不是 print )以防止 R 添加其他内容,例如引号和元素编号。

    为了清楚起见,我稍微更改了输入数据结构(使用 data.frame 而不是独立向量 section_namessection_data )。
    ```{r echo = FALSE, results = "asis"}
    input <- data.frame(
    name = LETTERS[1:4],
    data = runif(n = 4),
    text = replicate(4, paste(sample(x = LETTERS, size = 100, replace = TRUE), collapse = "")),
    stringsAsFactors = FALSE)

    template <- "## This is section %s
    Section data is `%0.2f`.
    Additional section text is: %s.

    " # dont't forget the newline

    for (i in seq(nrow(input))) {
    current <- input[i, ]
    cat(sprintf(template, current$name, current$data, current$text))
    }
    ```

    输出:

    This is section A

    Section data is 0.83. Additional section text is: PUFTZQFCYJFNENMAAUDPTWIKLBSVKWMJWODFHSPRJRROTVDGNEROBVQPLLMVNPOUUHGVGRPMKAOAOMVYXKMGMUHNYWZGPRAWPYLU.

    This is section B

    Section data is 0.49. Additional section text is: PFTYCGFSGSMAYSSCZXWLNLDOQEBJYEVSJIYDJPEPSWQBNWJVRUKBTYIUSTOICFKJFEJCWCAYBCQSRTXUDEQLLXCZNPUKNLJIQJXE.

    This is section C

    Section data is 0.58. Additional section text is: FCJDDDMNLBUSJMCZVSBPYWCKSFJEARBXXFPAGBTKCWKHPEDGYWYTNGLVGQGJAFZRUMNSDCHKTTMGRFNSUZKFLOUGNWHUBNLVMGDB.

    This is section D

    Section data is 0.52. Additional section text is: YQIXHABFVQUAAYZNWTZXJDISSLTZJJAZOLJMJSXEENFTUOFOTYKDNNUMFDXLJSWZEVDLCLSYCTSMEXFLBVQYRTBEVZLCTEBPUGTT.

    关于r - 使用循环在 rmarkdown 中生成文本部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36674824/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com