Link 使用 Shiny 到 RMarkdown 上的本地 html 文件

Link to a local html file on RMarkdown with Shiny

我有一个带有闪亮的交互式 RMarkdown 文档(即 YAML header 中的 runtime: shiny 行),我想在其中创建一个 link 到本地 html 文件。但到目前为止我都没有尝试过。

为了示例,假设我的工作目录中有以下文件:

我想要做的是在 rmarkdown_with_shiny.Rmd 中创建一个 link 打开文件 www/my_file。 html 单击时。

文件rmarkdown_with_shiny.Rmd中的代码如下,包括了所有我已经尝试过但到目前为止没有任何效果的代码:

    ---
    title: "Rmarkdown with shiny"
    output: html_document
    runtime: shiny
    ---

    [link_1](www/my_file.html)
    [link_2](my_file.html)
    [link_3](file://www/my_file.html)

    ```{r shiny_links, echo=F, eval=T}
    renderUI(tags$a("link_4", href="my_file.html", target="_blank"))
    renderUI(tags$a("link_5", href="www/my_file.html", target="_blank"))
    renderUI(tags$a("link_6", href="file://www/my_file.html", target="_blank"))

    shinyAppFile("shiny_app.R")
    ```

最后一行 shinyAppFile("shiny_app.R") 我可以嵌入一个包含工作 link 的应用程序(当应用程序单独 运行 时),但是一旦嵌入它就不会不再工作了。这是shiny_app.R:

里面的代码

    library('shiny')

    ui <- fluidPage(
        htmlOutput("link")
    )

    server <- function(input, output) {
      output$link <- renderUI(tags$a("single_link", href="my_file.html", target="_blank"))
    }
    shinyApp(ui = ui, server = server)

令人困惑的部分是,如果这行 [link_1](www/my_file.html) 只是没有闪亮的 rmarkdown,它就可以工作。如果它只是一个闪亮的应用程序 renderUI(tags$a("single_link", href="my_file.html", target="_blank")),这条线就可以工作。但是在带有 runtime: shiny 的 rmarkdown 文件中,这些都不起作用。

如果有人能告诉我如何在 rmarkdown + 闪亮文件中 link 本地 html 文件,我将不胜感激。特别是如果有一种方法可以使用闪亮的函数而不是降价语法来做到这一点。但任何一种解决方案都受到欢迎,只要它能创建一个正常运行的 link.

基本上,当我们 运行 Shiny 应用程序时,www 文件夹的内容是内部嵌入的,我们不需要将 www 文件夹包含到 href 属性中. 但是,如果我们想通过 runtime: shiny "expose" 这些内容,我们需要添加 shiny::addResourcePath() function 并指定其文件夹:

    ---
    title: "Rmarkdown with shiny"
    output: html_document
    runtime: shiny
    ---

    ```{r setup, include = FALSE}
    library(knitr)
    library(shiny)
    library(here)
    shiny::addResourcePath(prefix = "www", directoryPath = here::here("www"))
    ```

    Relative File Path: [My HTML file](www/my_file.html) 

    Relative File Path: <a href = "www/my_file.html" target="_blank">My HTML file</a>  
    Absolute File Path: <a href = "http://www.shinyapps.io/" target="_blank">shinyapps.io</a>

    Relative File Path: 
    ```{r shiny-relative-links, echo = FALSE, eval = TRUE}
    tags$a(href = "www/my_file.html",
       tags$span(style = "color: #03a9f4", "My HTML file"),
       target = "_blank")
    ```

    Absolute File Path:
    ```{r shiny-absolute-links, echo = FALSE, eval = TRUE}
    tags$a(href = "http://www.shinyapps.io/",
       tags$span(style = "color: #03a9f4", "shinyapps.io"),
       target = "_blank")
    ```

参见 here for original solution and discussion. Also, Ode to the here package