gpt4 book ai didi

r - 在 Shiny 的应用程序中显示文档页面

转载 作者:行者123 更新时间:2023-12-05 04:06:59 25 4
gpt4 key购买 nike

我有一个 Shiny 的应用程序,我想在 GUI 中显示一些文档页面。以下应用程序适用于作为源包安装的包,即使用

install.packages(packagename, type = "source")

但是,对于二进制包,我无法从包目录中提取相同的 html 文件。由于 tools::Rd2HTML,访问 .Rd 文件就足够了。任何帮助将不胜感激。

library(shiny)

# get a character vector containing all source packages or packages
# containing more than two files in pkgdir/html
pkgs <- rownames(installed.packages())
ndoc <- vapply(pkgs, function(pkg){
length(list.files(system.file("html", package = pkg)))}, 0)
src_pkgs <- pkgs[ndoc > 2]

ui <- fluidPage(
selectInput("package", "select package", src_pkgs),
uiOutput("choose_topic"),
wellPanel(uiOutput("documentation"))
)

server <- function(input, output, session){
output$choose_topic <- renderUI({
choices <- list.files(system.file("html", package = input$package))
selectInput("topic", "select topic", choices)
})

output$documentation <- renderUI({
includeHTML(
system.file(paste0("html/", req(input$topic)), package = input$package)
)
})
}

shinyApp(ui, server)

编辑

我刚刚想出了一种使用 tools::startDynamicHelp 来显示手册页的替代方法。这适用于所有包,甚至可以链接到其他手册页。但是,此方法不适用于 shiny-server,因为它使用环回接口(interface) (127.0.0.1)。

library(shiny)

pkgs <- rownames(installed.packages())

ui <- fluidPage(sidebarLayout(
sidebarPanel(
selectInput("package", "select package", pkgs),
uiOutput("choose_topic")
),
mainPanel(uiOutput("documentation"))
))

server <- function(input, output, session){
port <- tools::startDynamicHelp(NA)
home <- paste0("http://127.0.0.1:", port)

output$choose_topic <- renderUI({
choices <- unique(readRDS(system.file("help/aliases.rds", package = input$package)))
selectInput("topic", "select topic", choices)
})

output$documentation <- renderUI({
url <- paste0(home, "/library/", input$package, "/html/", input$topic,".html")
tags$iframe(src = url, width = "100%", height = "900px")
})
}

shinyApp(ui, server, options = list(launch.browser = TRUE))

最佳答案

感谢this post,我终于找到了一种使用packagedir/help 中文件的方法在 Rbloggers 上。

此版本获取 Rd 数据库 (RdDB) 文件的内容,然后在 tmp 中构建文档文件的 HTML 版本> 文件夹。它禁用所有链接,这正是我真正想要的。它也适用于 shiny-server

library(shiny)
library(tools)

ui <- fluidPage(sidebarLayout(
sidebarPanel(
selectInput("package", "select package", .packages(all.available = TRUE)),
uiOutput("choose_topic")
),
mainPanel(uiOutput("documentation"))
))

server <- function(input, output, session){
tmp <- tempfile()
onSessionEnded(function(){ unlink(tmp) })

RdDatabase <- reactive({
Rd_db(input$package)
})

output$choose_topic <- renderUI({
selectInput("topic", "select topic", sub(".Rd", "", names(RdDatabase())))
})

output$documentation <- renderUI({
rdfile <- paste0(input$topic, ".Rd")
req(rdfile %in% names(RdDatabase()))
Rd2HTML(RdDatabase()[[rdfile]], tmp, no_links = TRUE, package = input$package)
includeHTML(tmp)
})
}

shinyApp(ui, server)

关于r - 在 Shiny 的应用程序中显示文档页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com