添加书签并保存R SHINY中的书签 [英] Bookmarking and saving the bookmarks in R shiny

查看:17
本文介绍了添加书签并保存R SHINY中的书签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用R SHINY应用程序中的书签,并将书签保存在表中。第一阶段,我希望将它们保存在本地,并在每次加载此应用程序时检索它们。然后将它们保存在数据库中。下面是添加书签并将其保存在桌子上的代码。到目前为止,书签在它从保存的RD读取的地方工作。

还使用URLshinyapps.io上执行书签操作,可以将书签保存到AWS上的数据库。

library(shiny)
library(RSQLite)
library(data.table)

ui <- function(request) {
  fluidPage(
    plotOutput("plot"),
    sliderInput("n", "Number of observations", 1, nrow(faithful), 100),
    fluidRow(column(2, textInput(inputId = "description", label = "Bookmark description", placeholder = "Data Summary")), column(2, bookmarkButton(id="bookmarkBtn"))),
    DT::dataTableOutput("urlTable", width = "100%"),
    tags$style(type='text/css', "#bookmarkBtn { width:100%; margin-top: 25px;}")
  )
}

server <- function(input, output, session) {

  # con <- dbConnect(RSQLite::SQLite(), "bookmarks.db", overwrite = FALSE)
   myBookmarks <- reactiveValues(urlDF = NULL)
  #
  observeEvent(input$bookmarkBtn, {
    session$doBookmark()
  })
  #
  # if(dbExistsTable(con, "Bookmarks")){
  #   tmpUrlDF <- data.table(dbReadTable(con, "Bookmarks"))
  #   myBookmarks$urlDF <- tmpUrlDF[, Timestamp := as.POSIXct(Timestamp, origin="1970-01-01 00:00")]
  # } else {
  #   myBookmarks$urlDF <- NULL
  # }
  #
  # session$onSessionEnded(function() {
  #   tmpUrlDF <- isolate({myBookmarks$urlDF})
  #   if(!is.null(tmpUrlDF)){
  #     dbWriteTable(con, "Bookmarks", tmpUrlDF, overwrite = TRUE)
  #   }
  #   dbDisconnect(con)
  # })

  setBookmarkExclude(c("bookmarkBtn", "description", "urlTable_cell_clicked", "urlTable_rows_all", "urlTable_rows_current", "urlTable_rows_selected", "urlTable_search", "urlTable_state", "urlTable_row_last_clicked"))

  output$plot <- renderPlot({
    hist(faithful$eruptions[seq_len(input$n)], breaks = 40)
  })

  onBookmarked(fun=function(url){
    if(!url %in% myBookmarks$urlDF){
      if(is.null(myBookmarks$urlDF)){
        myBookmarks$urlDF <- unique(data.table(Description = input$description, URL = paste0("<a href='", url, "'>", url,"</a>"), Timestamp = Sys.time(), Session = session$token), by="URL")
      } else {
        myBookmarks$urlDF <- unique(rbindlist(list(myBookmarks$urlDF, data.table(Description = input$description, URL = paste0("<a href='", url, "'>", url,"</a>"), Timestamp = Sys.time(), Session = session$token))), by="URL")
      }
    }
  })

  output$urlTable = DT::renderDataTable({
    #read_rds("bookmarks.rds")
    myBookmarks$urlDF
    write_rds(myBookmarks$urlDF, "bookmark.rds")
  }, escape=FALSE)

}

enableBookmarking(store = "url")
shinyApp(ui, server)
#> PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.

静电R降价文档不支持闪亮的应用

reprex package(v0.2.1.9000)创建于2019-01-29

推荐答案

以下是我之前answer使用saveRDS()而不是sqlite的替代方法:

编辑:添加用户名检查。

library(shiny)
# library(RSQLite)
library(data.table)

ui <- function(request) {
  fluidPage(
    plotOutput("plot"),
    sliderInput("n", "Number of observations", 1, nrow(faithful), 100),
    fluidRow(column(2, textInput(inputId = "description", label = "Bookmark description", placeholder = "Data Summary")), column(2, bookmarkButton(id="bookmarkBtn"))),
    DT::dataTableOutput("urlTable", width = "100%"),
    tags$style(type='text/css', "#bookmarkBtn { width:100%; margin-top: 25px;}")
  )
}

server <- function(input, output, session) {

  # con <- dbConnect(RSQLite::SQLite(), "bookmarks.db", overwrite = FALSE)
  myBookmarks <- reactiveValues(urlDF = NULL)

  observeEvent(input$bookmarkBtn, {
    session$doBookmark()
  })

  # if(dbExistsTable(con, "Bookmarks")){
  #   tmpUrlDF <- data.table(dbReadTable(con, "Bookmarks"))
  #   myBookmarks$urlDF <- tmpUrlDF[, Timestamp := as.POSIXct(Timestamp, origin="1970-01-01 00:00")]
  # } else {
  #   myBookmarks$urlDF <- NULL
  # }

  if(file.exists("bookmarks.rds")){
    myBookmarks$urlDF <- readRDS("bookmarks.rds")
  } else {
    myBookmarks$urlDF <- NULL
  }

  session$onSessionEnded(function() {
    tmpUrlDF <- isolate({myBookmarks$urlDF})
    if(!is.null(tmpUrlDF)){
      # dbWriteTable(con, "Bookmarks", tmpUrlDF, overwrite = TRUE)
      saveRDS(tmpUrlDF, "bookmarks.rds")
    }
    # dbDisconnect(con)
  })

  setBookmarkExclude(c("bookmarkBtn", "description", "urlTable_cell_clicked", "urlTable_rows_all", "urlTable_rows_current", "urlTable_rows_selected", "urlTable_search", "urlTable_state", "urlTable_row_last_clicked"))

  output$plot <- renderPlot({
    hist(faithful$eruptions[seq_len(input$n)], breaks = 40)
  })

  onBookmarked(fun=function(url){
    if(!url %in% myBookmarks$urlDF$URL){
      if(is.null(myBookmarks$urlDF)){
        myBookmarks$urlDF <- unique(data.table(Description = input$description, URL = paste0("<a href='", url, "'>", url,"</a>"), Timestamp = Sys.time(), Session = session$token, User = Sys.getenv("USERNAME")), by="URL")
      } else {
        myBookmarks$urlDF <- unique(rbindlist(list(myBookmarks$urlDF, data.table(Description = input$description, URL = paste0("<a href='", url, "'>", url,"</a>"), Timestamp = Sys.time(), Session = session$token, User = Sys.getenv("USERNAME")))), by="URL")
      }
    }
  })

  output$urlTable = DT::renderDataTable({
  req(myBookmarks$urlDF)
    myBookmarks$urlDF[User %in% Sys.getenv("USERNAME")]
  }, escape=FALSE)

}

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

这篇关于添加书签并保存R SHINY中的书签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆