R Markdown-Rmd文件外部的超链接

时间:2018-10-10 17:39:08

标签: r hyperlink markdown r-markdown

我想知道如何为Rmd文件外部的R markdown定义超链接。在Rmd文件中定义超链接就像键入[hyperlink lable](实际链接)一样容易;但是,如果在Rmd文件上,我正在调用其他一些生成文件地址的R文件(例如,一个函数),是否有办法将这些信息传回Rmd文件,以便在那里生成超链接?

请参阅下面的示例以获取更多说明:

内部Rmd文件:

myFun( with some input)

在myFun内部:

myFun <- function( with some input)
some calculations...
return("[click here](C:/myFile.docx)")

生成的html页面上的输出为:

[1]“ [单击此处](C:/myFile.docx)”

这不是超链接!

3 个答案:

答案 0 :(得分:1)

要定义rmd文件外部的链接,可以使用parameterized report。这样,您可以在编译时将值传递到rmarkdown文档中。为此,首先创建一个包含所需参数的rmarkdown文档,该文档在yaml标头中声明,然后在报表中稍后使用。然后,在单独的R脚本中,运行render命令(来自rmarkdown包),并传递所需的参数值。

下面是使用catpaste生成链接的示例。为了进行比较,我还添加了第二组参数,这些参数使用@JohnCoene的答案中的方法添加了不同的链接。我已将rmarkdown文档另存为"test.rmd",这是在render命令中标识该文档的方式。

rmarkdown文档

---
output: html_document
params:
  text1: "add text"
  link1: "add URL"
  text2: "add text"
  link2: "add URL" 
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

```{r}
# Function to add link 
myFun <- function(text, link, inline=TRUE) {
  if(inline) {
    paste("[", text, "](", link, ")", sep="")
  } else {
    cat("[", text, "](", link, ")", sep="")
  }
}
```

Blah, blah, blah, more text. And here's the link: 

```{r, results="asis"}
myFun(params$text1, params$link1, inline=FALSE)
```

Blah, blah, blah, more text. And here's a way to `r myFun(params$text1, params$link1)`.

Or, using the examples from `@JohnCoene's` answer:

With an HTML tag:

```{r, results="asis"}
tg <- function (link, text){
  paste0("<a href='", link, "'>", text, "</a>")
}

tg(params$link2, params$text2)
```

With `htmltools`:

```{r}
# install.packages("htmltools")
library(htmltools)

tags$a(
  href = params$link2,
  params$text2
)
```

使用单独的R脚本呈现rmarkdown文档

library(rmarkdown)

render(input="test.rmd", 
       params=list(text1="link to Stackoverflow", 
                   link1="https://stackoverflow.com/questions/52745926/r-markdown-hyperlink-outside-rmd-file",
                   text2="link to google",
                   link2="https://google.com"))

这是输出html文档的样子:

enter image description here

答案 1 :(得分:0)

有多种解决方案,可以返回html标签或使用htmltools包。

HTML标记

```{r, results="asis"}
tg <- function (link, text){
  paste0("<a href='", link"'>", text, "</a>")
}

tg("http://google.com", "link to Google")
```

htmltools

绝对可以推荐这种方式。

```{r}
# install.packages("htmltools")
library(htmltools)

tags$a(
  href = "https://google.com",
  "Link to Google"
)
```

答案 2 :(得分:0)

如问题中所述,假设'myFun'函数的输出为超链接字符串,这是最适合我的:

在myFun内部:

myFun <- function()
...some calculations to generate a csv file...
return("C:/myFile.csv")

内部Rmd文件:

```{r, echo=FALSE}
myHyperlink <- myFun()
hyperlink_exists = !is.null(myHyperlink)
```

```{r, eval=hyperlink_exists, results="asis", echo=FALSE}
cat(paste0("The file is saved ","[", "Here", "](", myHyperlink, ")","\n"))
```