我想知道如何为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)”
这不是超链接!
答案 0 :(得分:1)
要定义rmd
文件外部的链接,可以使用parameterized report。这样,您可以在编译时将值传递到rmarkdown
文档中。为此,首先创建一个包含所需参数的rmarkdown
文档,该文档在yaml
标头中声明,然后在报表中稍后使用。然后,在单独的R脚本中,运行render
命令(来自rmarkdown
包),并传递所需的参数值。
下面是使用cat
或paste
生成链接的示例。为了进行比较,我还添加了第二组参数,这些参数使用@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
)
```
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文档的样子:
答案 1 :(得分:0)
有多种解决方案,可以返回html标签或使用htmltools包。
```{r, results="asis"}
tg <- function (link, text){
paste0("<a href='", link"'>", text, "</a>")
}
tg("http://google.com", "link to Google")
```
绝对可以推荐这种方式。
```{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"))
```