Как добавить файл с закладкой в ​​закладки? - PullRequest
0 голосов
/ 29 декабря 2018

Я использую пример, который появляется на rstudio.com блестящего приложения для загрузки файлов: https://shiny.rstudio.com/articles/upload.html

Я изменил код, вставил bookmmarkButton, функции enableBookmarking и onbookmark и onRestore, ноэто не работает для меня.Что не так в коде?

library(shiny)

ui <- fluidPage(

    # App title ----
  titlePanel("Uploading Files"),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(
      bookmarkButton(),  
      # Input: Select a file ----
      fileInput("file1", "Choose CSV File",
                multiple = TRUE,
                accept = c("text/csv",
                           "text/comma-separated-values,text/plain",
                           ".csv")),

      # Horizontal line ----
      tags$hr(),

      # Input: Checkbox if file has header ----
      checkboxInput("header", "Header", TRUE),

      # Input: Select separator ----
      radioButtons("sep", "Separator",
                   choices = c(Comma = ",",
                               Semicolon = ";",
                               Tab = "\t"),
                   selected = ","),

      # Input: Select quotes ----
      radioButtons("quote", "Quote",
                   choices = c(None = "",
                               "Double Quote" = '"',
                               "Single Quote" = "'"),
                   selected = '"'),

      # Horizontal line ----
      tags$hr(),

      # Input: Select number of rows to display ----
      radioButtons("disp", "Display",
                   choices = c(Head = "head",
                               All = "all"),
                   selected = "head")

    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Data file ----
      tableOutput("contents")

    )

  )
)

# Define server logic to read selected file ----
server <- function(input, output) {




  output$contents <- renderTable({

    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, head of that data file by default,
    # or all rows if selected, will be shown.

    req(input$file1)

    df <<- read.csv(input$file1$datapath,
                   header = input$header,
                   sep = input$sep,
                   quote = input$quote)

    if(input$disp == "head") {
      return(head(df))
    }
    else {
      return(df)
    }


  })

  onBookmark(function(state){
    state$values$data <- df

  })

  onRestore(function(state){

    df <- state$values$data

  })

}

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

1 Ответ

0 голосов
/ 01 января 2019

Документация enableBookmarking определяет, что необходимо сделать, чтобы это работало:

Для правильного восстановления состояния пользовательский интерфейс должен быть функцией, которая принимает одинаргумент, просьба.В большинстве приложений Shiny пользовательский интерфейс не является функцией;это может иметь форму fluidPage(....).Преобразовать его в функцию так же просто, как обернуть его в функцию, как в function(request) { fluidPage(....) }.

Кажется, что теперь это работает, с функцией, обертывающей fluidPage вашего uiкод:

library(shiny)

ui <- function(request){
  fluidPage(

  # App title ----
  titlePanel("Uploading Files"),

  # Sidebar layout with input and output definitions ----


    sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(
      bookmarkButton(),  
      # Input: Select a file ----
      fileInput("file1", "Choose CSV File",
                multiple = TRUE,
                accept = c("text/csv",
                           "text/comma-separated-values,text/plain",
                           ".csv")),

      # Horizontal line ----
      tags$hr(),

      # Input: Checkbox if file has header ----
      checkboxInput("header", "Header", TRUE),

      # Input: Select separator ----
      radioButtons("sep", "Separator",
                   choices = c(Comma = ",",
                               Semicolon = ";",
                               Tab = "\t"),
                   selected = ","),

      # Input: Select quotes ----
      radioButtons("quote", "Quote",
                   choices = c(None = "",
                               "Double Quote" = '"',
                               "Single Quote" = "'"),
                   selected = '"'),

      # Horizontal line ----
      tags$hr(),

      # Input: Select number of rows to display ----
      radioButtons("disp", "Display",
                   choices = c(Head = "head",
                               All = "all"),
                   selected = "head")

    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Data file ----
      tableOutput("contents")

    )

  )
)
}
# Define server logic to read selected file ----
server <- function(input, output) {

  output$contents <- renderTable({

    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, head of that data file by default,
    # or all rows if selected, will be shown.

    req(input$file1)
    df <<- read.csv(input$file1$datapath,
                    header = input$header,
                    sep = input$sep,
                    quote = input$quote)

    if(input$disp == "head") {
      return(head(df))
    }
    else {
      return(df)
    }
  })

  onBookmark(function(state){
    state$values$data <- df

  })

  onRestore(function(state){
    df <- state$values$data
  })

}

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