首页 > 解决方案 > 将 R Shiny 书签保存到本地 .url

问题描述

我有一个漂亮的闪亮应用程序,想为应用程序的状态添加书签并打开一个保存文件对话框,允许用户将 URL 快捷方式保存到他/她的机器以供以后使用。下面的示例代码。目前该应用程序仅显示 ulr 链接,但不会创建 url 快捷方式或将其保存在任何地方。看起来很简单,但我没有直接找到任何关于这个的帖子,我自己也没有完全弄清楚。

    ui <- function(request) {
  fluidPage(
    textInput("txt", "Enter text"),
    checkboxInput("caps", "Capitalize"),
    verbatimTextOutput("out"),
    bookmarkButton()
  )
}
server <- function(input, output, session) {
  output$out <- renderText({
    if (input$caps)
      toupper(input$txt)
    else
      input$txt
  })
}

shinyApp(ui, server, enableBookmarking = "url")

我发现以下帖子很有用,但它并没有完全得到我正在寻找的结果。关联

标签: rshinyshinydashboardshiny-serverbookmarks

解决方案


我回答晚了,但它可以帮助下一个访客。您可以使用shinyFiles包。该解决方案不美观,因为您必须在保存之前先单击书签按钮。

library(shiny)
library(shinyFiles)


ui <- function(request) {
  fluidPage(
    
    textInput("txt", "Enter text"),
    checkboxInput("caps", "Capitalize"),
    verbatimTextOutput("out"),
    bookmarkButton(id="bookmarkBtn"),
    shinySaveButton("save", "Save file", "Save file as ...", filetype=list(txt=".txt"))

  )
}

server <- function(input, output, session) {
  output$out <- renderText({
    if (input$caps)
      toupper(input$txt)
    else
      input$txt
  })
  
  myBookmarks <- reactiveValues(urlDF = NULL)  
  
  observeEvent(input$bookmarkBtn, {
    session$doBookmark()
  })
  
  onBookmarked(fun=function(url){
      myBookmarks$urlDF <- url
  })
  
  observeEvent(input$bookmarkBtn, {
    print(myBookmarks$urlDF)
  })
  
  observe({
    roots <- getVolumes()
    shinyFileSave(input, "save", roots=roots, session=session)
    fileinfo <- parseSavePath(roots, input$save)
    if (nrow(fileinfo) > 0) {
      write.table(myBookmarks$urlDF, as.character(fileinfo$datapath))
    }
  })
}

shinyApp(ui, server, enableBookmarking = "url")

推荐阅读