Динамический контент Rmarkdown

Я хочу использовать R для создания динамического контента для использования в файле Rmd.

Допустим, у меня есть вектор символов, chars, как я могу создать абзац документа из каждого элемента в векторе?

Рассмотрим следующее:

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

Вышеприведенный вывод создает вывод R, отформатированный как программный вывод, но на самом деле я хочу, чтобы он был содержимым документа, другими словами, тремя абзацами, содержащими строки «ABC», «DEF» и «GHI» соответственно.


person Nicholas Hamilton    schedule 11.05.2016    source источник
comment
Итак, в основном вы хотите объединить значения символов, но с разделителями строки, которые заставят его создать новый абзац, вставленный между каждым элементом. Верно?   -  person Elin    schedule 11.05.2016


Ответы (4)


Вы могли бы сделать

```{r echo=TRUE, results='asis'}
chars = c("ABC","DEF","GHI")
for(char in chars){ cat('<p>', char, '</p>') }
```
person lukeA    schedule 11.05.2016
comment
Что делать, если документ в формате pdf/латекс? - person Nicholas Hamilton; 11.05.2016

Что-то вроде этого будет работать для того, что вы хотите.

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

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

```
`r newstring`

Rmarkdown использует два пробела в конце строки для принудительного возврата. Но вам нужно поместить новую строку в свой sep, чтобы убедиться, что два пробела находятся в конце строки.

person Elin    schedule 11.05.2016
comment
очень похоже на решение, которое я использовал - person Nicholas Hamilton; 12.05.2016

Вы можете комбинировать предыдущие ответы для создания более сложного 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

---
person kabr    schedule 11.05.2016

Это решение, которое я использовал, сначала создайте функцию:

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"))
```
person Nicholas Hamilton    schedule 12.05.2016