r - 有没有办法在 Shiny 链接中打开用户的小插图?

标签 r shiny

我有一个包,其中包含一个 Shiny 的应用程序。我想在应用程序中包含一个链接以打开小插图。我宁愿让链接直接打开用户版本的小插图(即......我宁愿不必在某处在线维护小插图的副本)。我不确定这个包是否会转到 CRAN,所以我也不想依赖 CRAN 链接( Shiny 的应用程序只会在本地运行)。我试过这是 ui 代码:

 vig_path <- system.file("doc", package="myPackage")      
 HTML(paste0("<a href=\"file:///", vig_path,"/Introduction.html\">Introduction</a>"))

当复制链接位置并将其粘贴到浏览器中时(即,通过 Chrome 开发工具从“检查”),它会打开(因此,路径是正确的)。出现错误“不允许加载本地资源:”。那么,我只是运气不好,还是有打开我丢失的本地文件的技巧?

最佳答案

嗯,在 R 中显示插图的大部分魔法都发生在 utils:::print.vignette 函数中。此函数可以使用 R 的内置帮助系统获取帮助页面的 URL。不幸的是,从函数本身提取这个 URL 似乎并不容易。但是我们可以把内脏切下来自己包起来。例如

get_vignette_link <- function(...) {
  x <- vignette(...)
  if (nzchar(out <- x$PDF)) {
    ext <- tools::file_ext(out)
    port <- if (tolower(ext) == "html") 
      tools::startDynamicHelp(NA)
    else 0L
    if (port > 0L) {
      out <- sprintf("http://127.0.0.1:%d/library/%s/doc/%s", 
              port, basename(x$Dir), out)
      return(out)
    }
  }
  stop("no html help found")
}

我们可以像这样使用它

get_vignette_link("programming", package="dplyr")

并且应该返回该小插图的 URL。它采用与 ?vignette 函数相同的参数。然后您可以使用它在您的 Shiny 应用程序中创建一个链接。例如

library(shiny)
ui <- fluidPage(
  htmlOutput("text")
)
server <- function(input, output) {
   output$text <- renderUI({
      a("dplyr programming vignette", 
          href=get_vignette_link("programming", package="dplyr"))
   })
}
shinyApp(ui = ui, server = server)

因为您正在浏览 R 的 HTML 帮助服务器,所以您不必访问本地文件路径,因此您不应该遇到权限错误。

关于r - 有没有办法在 Shiny 链接中打开用户的小插图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51292957/

相关文章:

r - xgboost多项式分类错误: "label and prediction size not match"

r - 是否可以在 R Shiny 中更改传单 map 屏幕截图大小?

javascript - 如何在 Shiny 中使用 visNetworkProxy 与基于节点 ID 的节点进行交互

css - R Shiny : Interactively modify application theme

r - Shiny 的 : variable height of renderplot

r - 在 Shiny 的应用程序中搜索多个 rhandsontable 的功能

r - 如何将数据帧插入SQL Server表中?

regex - 标签正则表达式,在 url 中保留#

r - 使用rentrez在R中解析XML文件

r - 拆分字符串并仅保留一个特定部分