r - 有没有办法在闪亮链接中打开用户的小插图?
问题描述
我有一个包含闪亮应用程序的包。我想在应用程序中包含一个链接以打开小插图。我宁愿让链接直接打开用户的小插图版本(即......我宁愿不必在某处在线维护小插图的副本)。我不确定这个包会不会去 CRAN,所以我也不想依赖 CRAN 链接(而且闪亮的应用程序只会在本地运行)。我试过这是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 帮助服务器,所以您不必访问本地文件路径,因此您不应该得到权限错误。
推荐阅读
- c# - C#如何将此代码从多行文本修复为从右到左移动的选取框文本上的标签?
- python - Python 中 Pandas 中的 Groupby()
- python - 如何将所有超过 30 天的文件夹复制并移动到 _History 文件夹?
- c++ - cmake 使用已安装目标中的 find_package 包含依赖项
- r - 如何获取特殊字符的原始数字 HTML 表示?
- php - Laravel 多对多表结构的正确方法
- react-native - 如何在 FlatList 中使用 if
- python - 使用 xpath 和 selenium python 单击文本
- c# - 输入整数?vs 类型 int
- java - 为什么这段代码没有改变我的整个应用程序语言?