Как показать пример данных, а затем обновить данные пользователя в блестящем? - PullRequest
0 голосов
/ 26 января 2020

Вот пример. Я хотел показать пример данных, если пользователь нажмет Show example или отобразит данные, загруженные пользователем.

df<-data.frame(x=rnorm(9), 
               y=rnorm(9), 
               z=rnorm(9))
write.table(df, "test.txt", quote=F)


library(shiny)
ui <- shinyUI(pageWithSidebar(
  headerPanel("test"),
  sidebarPanel(
    actionButton("evReactiveButton", "Show example"),
    fileInput("file1", "Upload File",
              multiple = TRUE,
              accept = c("text/csv",
                         "text/comma-separated-values,text/plain",
                         ".csv"))
  ),
  mainPanel(
    tableOutput("matrix")
  )
))

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

  #if action button show example
  datobj<-reactive({
    dat<-matrix(1:100, nrow=10)
    return(dat)
  })

  #if user upload
  datobj <- reactive({
    req(input$file1)
    dat <- read.table(input$file1$datapath)
    return(dat)
  })

  ### matrix file
    output$matrix <- renderTable({
    return(datobj())
  })

}

shinyApp(ui=ui,server=server) 

1 Ответ

1 голос
/ 26 января 2020

Вот один из способов сделать это, используя observeEvent. Я добавил actionButton, чтобы легче переключаться между данными примера (здесь не реагирует) и данными, импортируемыми пользователем. Если вы хотите удалить эту кнопку, не забудьте также заменить вторую observeEvent среду на observe.

df<-data.frame(x=rnorm(9), 
               y=rnorm(9), 
               z=rnorm(9))
write.table(df, "test.txt", quote=F)


library(shiny)
ui <- shinyUI(pageWithSidebar(
  headerPanel("test"),
  sidebarPanel(
    actionButton("example", "Show example"),
    fileInput("file1", "Upload File",
              multiple = TRUE,
              accept = c("text/csv",
                         "text/comma-separated-values,text/plain",
                         ".csv")),
    actionButton("import", "Show data imported")
  ),
  mainPanel(
    tableOutput("matrix")
  )
))

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

  #if action button show example
  datobj<- mtcars

  #if user upload
  datobj2 <- reactive({
    req(input$file1)
    dat <- read.table(input$file1$datapath, sep = " ")
    return(dat)
  })

  ### matrix file
  observeEvent(input$example, {
      output$matrix <- renderTable({
        datobj
      })
    })

  observeEvent(input$import, {
    if (!is.null(datobj2())){
      output$matrix <- renderTable({
        datobj2()
      })
    }
    else {}
  })

}

shinyApp(ui=ui,server=server) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...