R Markdown - Гиперссылка вне файла Rmd - PullRequest
0 голосов
/ 10 октября 2018

Мне интересно, как мы можем определить гиперссылку для разметки R вне Rmd-файла.Определить гиперссылку внутри 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-страницеis:

[1] "[нажмите здесь] (C: /myFile.docx)"

Что не является гиперссылкой!

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Чтобы определить ссылки вне файла rmd, вы можете использовать параметризованный отчет .Это позволяет передавать значения в документ 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
)
```

Отдельный скрипт Rдля рендеринга rmarkdown документа

library(rmarkdown)

render(input="test.rmd", 
       params=list(text1="link to Stackoverflow", 
                   link1="/12119310/r-markdown-giperssylka-vne-faila-rmd",
                   text2="link to google",
                   link2="https://google.com"))

Вот как выглядит выходной HTML-документ:

enter image description here

0 голосов
/ 12 октября 2018

Как упомянуто в вопросе, предполагая, что вывод функции '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"))
```
0 голосов
/ 10 октября 2018

Существует несколько решений, верните 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"
)
```
...