ifelse动作取决于rmarkdown中的文档类型

Tyl*_*ker 9 r r-markdown

使用rmarkdown以下内容准备报告时:http://rmarkdown.rstudio.com/可能希望文档根据文档类型进行不同的呈现.例如,如果正在呈现的文档是html文件,我可能想要嵌入一个YouTube视频,就好像它是pdf或MS Word我想要的是超链接的URL.

有没有办法告诉rmarkdown这样的事情:

if (html) {
    <iframe width="640" height="390" src="https://www.youtube.com/embed/FnblmZdTbYs?    feature=player_detailpage" frameborder="0" allowfullscreen></iframe>
} else {
    https://www.youtube.com/watch?v=ekBJgsfKnlw
}
Run Code Online (Sandbox Code Playgroud)

devtools::install_github("rstudio/rmarkdown")
library(rmarkdown)
render("foo.Rmd", "all")
Run Code Online (Sandbox Code Playgroud)

foo.Rmd

---
title: "For Fun"
date: "`r format(Sys.time(), '%d %B, %Y')`"
output:
  html_document:
    toc: true
    theme: journal
    number_sections: true
  pdf_document:
    toc: true
    number_sections: true
  word_document:
    fig_width: 5
    fig_height: 5
    fig_caption: true
---

## Good times

<iframe width="640" height="390" src="https://www.youtube.com/embed/FnblmZdTbYs?feature=player_detailpage" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 6

正如在回答相关问题时所指出的,knitr1.18 引入了以下功能

knitr::is_html_output()
knitr::is_latex_output()
Run Code Online (Sandbox Code Playgroud)

顾名思义,is_html_output()检查输出是否为HTML.你会添加这样的东西foo.Rmd:

```{r results='asis'}
if (knitr::is_html_output()) {
    cat('<iframe width="640" height="390" src="https://www.youtube.com/embed/FnblmZdTbYs?        feature=player_detailpage" frameborder="0" allowfullscreen></iframe>')
} else {
    cat("https://www.youtube.com/watch?v=ekBJgsfKnlw")
}
```
Run Code Online (Sandbox Code Playgroud)


tmp*_*345 5

是的,您可以通过访问输出格式knitr::opts_knit$get("rmarkdown.pandoc.to").这将返回具有目标输出格式的字符串.这是一个例子:

---
title: "Untitled"
output: html_document
---

```{r}
library(knitr)
opts_knit$get("rmarkdown.pandoc.to")
```
Run Code Online (Sandbox Code Playgroud)

这将返回html_document的"html",word_document的"docx"和pdf_document的"latex".所以要回答你的问题,你可以这样做:

html <- knitr::opts_knit$get("rmarkdown.pandoc.to") == "html"
Run Code Online (Sandbox Code Playgroud)