программно включать изображения в документ .md из блока R с помощью knitr

Я хочу программно включить множество изображений в свой документ с разметкой .Rmd. Что-то типа

```{r echo=FALSE}
cat("![](myfile_1.png)")
```

не будет работать, так как результирующий результат .md будет

```
## ![](myfile_1.png)
```

Мне нужно было бы избавиться от кодовых тегов ``` и ведущего ##. Есть ли возможность напрямую ввести код уценки из блока R?

BTY: Та же проблема относится и к HTML. Здесь также будет очень полезна инъекция HTML-кода из блока R.


person Mark Heckmann    schedule 19.06.2012    source источник
comment
ответ @mnel правильный, но мне интересно, зачем вам это нужно; обычно мне не нравятся cat()s. Я могу понять это, если ваши изображения извне, иначе вы должны просто позволить knitr записывать изображения, сгенерированные из кода R, для вывода уценки   -  person Yihui Xie    schedule 19.06.2012


Ответы (3)


Использование results ='asis' означает, что вам не нужно возиться с хуками, комментариями и т. Д., Поскольку результаты считаются не кодом, а уценкой (или любым другим форматом вывода)

```{r myfile-1-plot, echo = F, results = 'asis'}
cat('\n![This is myfile_1.png](myfile1.png)\n')
```

Приведет к

![This is myfile_1.png](myfile1.png)

Обратите внимание, что я обернул выходной текст маркерами новой строки, чтобы убедиться, что он находится на отдельной строке.

person mnel    schedule 19.06.2012
comment
+1 это абсолютно правильный путь и именно то, что results='asis' означает (yihui.name/knitr/options) - person Yihui Xie; 19.06.2012

Предполагая, что вы используете knitr, вы можете использовать параметр comment:

```{r echo=FALSE, comment=""}
cat("![](myfile_1.png)")
```

Редактировать

Придется менять крючки:

```{r echo=FALSE, comment=""}
knit_hooks$set(output = function(x,
        options) x)
cat("![](myfile_1.png)")
```

Когда вы снова захотите отрендерить уценку, не забудьте снова сбросить хуки, один из способов - использовать render_markdown().

```{r b, echo=FALSE, comment=""}
render_markdown()
a <- 1
```
person johannes    schedule 19.06.2012
comment
Спасибо. Это решает часть для ##. Изображение не будет включено, поскольку мы все еще не избавляемся от .md разметки кода `` этим ... - person Mark Heckmann; 19.06.2012
comment
Вам нужно будет сменить крючки, я соответственно изменил свой ответ. - person johannes; 19.06.2012

Чтобы использовать в цикле, если вам нужно вставить кучу изображений из фрейма данных:

for(h in 1:nrow(file_names)){
   image_file<-paste('\n![](', file_names[h],')\n',sep="") 
   cat('\n')
   cat(image_file)
   cat('\n')
}
person Odysseus Ithaca    schedule 18.09.2017
comment
спасибо, я искал исправить это, и ты заставил это работать - person splaisan; 06.06.2018