【问题标题】:Rmarkdown Dynamic ContentRmarkdown 动态内容
【发布时间】:2016-05-11 08:40:41
【问题描述】:

我想使用 R 生成用于 Rmd 文件的动态内容。

假设我有一个字符向量chars,我如何从向量中的每个项目生成文档段落?

考虑以下几点:

```{r echo=TRUE}
chars = c("ABC","DEF","GHI")
for(char in chars){ print(char) }
```

上面产生R输出,格式化为编程输出,但我实际上想要它作为文档内容,换句话说,三个段落,分别包含字符串'ABC','DEF'和'GHI'

【问题讨论】:

  • 所以基本上你想连接 chars 的值,但使用换行符分隔符,这将导致它创建一个插入每个元素之间的新段落。对吗?

标签: r dynamic r-markdown


【解决方案1】:

你可以的

```{r echo=TRUE, results='asis'}
chars = c("ABC","DEF","GHI")
for(char in chars){ cat('<p>', char, '</p>') }
```

【讨论】:

  • 如果文档是pdf/latex怎么办?
【解决方案2】:

这样的东西可以满足你的需求。

```{r, echo=FALSE}
# Load your libraries here

chars = c("ABC", "DEF", "HIJ")
newstring<-paste(chars, "", collapse = "", sep = "  \n")

```
`r newstring`

Rmarkdown 在行尾使用两个空格来强制执行硬返回。但是您需要将新行放在 sep 中,以确保这两个空格位于行尾。

【讨论】:

  • 与我最终使用的解决方案非常相似
【解决方案3】:

您可以结合前面的答案来创建更复杂的 HTML。

 ```{r echo=TRUE, results='asis'}

chars = c("ABC","DEF","GHI")   

for(char in chars){


    cat(paste("<div class='div1'><div class='div2'>", char,"</div></div>"), sep = "") 

}

```

如果你想为你的 div 设置样式,只需在标题中包含style.css

---
title: ""
author: ""
date: ""
output: 
  html_document:
    css: style.css

---

【讨论】:

    【解决方案4】:

    这是我最终使用的解决方案,首先创建一个函数:

    printSection = function(content){
      if(any(content != '')){
        cat(gsub(pattern = "\n", replacement = "  \n\n", x = paste(content,collapse="\n")))
      }
    }
    

    然后按如下方式使用:

    ```{r echo=FALSE,result='asis'}
    printSection(c("ABC","DEF","GHI"))
    ```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多