将数据保存在R Shiny中

时间:2017-08-13 19:46:13

标签: r shiny

如何保存用户插入的数据,我只打印:

print(c(input$buttonNext,randomNumber,input_radio))

这不应该只是印刷,但以后应该可以使用。我的计划是,人们评估我的情节,然后我为每个用户看到他为每个情节点击的按钮。

ui <- fluidPage(

  actionButton("buttonNext", "Next"),

  radioButtons("radio", "Your Decision:",
               choices = c("No Decision" = 'NoDec', "Yes" = 'yes', "No" = 'no'),
               selected = 'NoDec'),

  plotOutput("TimeSeriesPlot")
)


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

  clickNext <- reactive({
    isolate(input_radio <- input$radio)
    randomNumber <- input$buttonNext
    print(c(input$buttonNext,randomNumber,input_radio))
    return(randomNumber)
  })

  observeEvent(input$buttonNext,
               {
                 updateRadioButtons(session,'radio',selected = -1)
               })

  output$TimeSeriesPlot <- renderPlot({ 
    i <- clickNext()
    plot(i)
  })

}
shinyApp(server = server, ui = ui)

1 个答案:

答案 0 :(得分:0)

这种方法是任何类似网络应用的典型方法,您可以:

  • 将数据保存为专用文件夹中的文件,可以是csv格式或rds(R压缩格式),也可以使用文件名中的用户名,时间,会话等组合。
  • 使用某种数据库连接(类似SQLite,mysql,PostgreSQL都可以。在这里你可以根据应用决定最佳设计(例如所有用户的单表,每个用户的表等)。

最终决定将取决于应用程序的复杂性,数据量,对数据完整性,可移植性,环境等的担忧。

利用R的一些很好的功能,你可以根据你的要求,用户指定的参数,但你甚至可以存储实际的结果图。

理想情况下,这需要db中的blob字段,但原则上你可以构建一个列表列表,其中一个条目是绘图参数,另一个是实际绘图(然后将所有内容保存在单个rds中文件。

这是一个示例实现。您可以将数据保存在RDS文件中,或使用替代实现(此处已注释掉),允许您在终止应用程序时保存数据。

library(shiny)

# this is not strictly necessary, but is the way I prefer to define an emply data.frame
resultData <- data.frame(times=character(), inputs=numeric(), random=numeric(),
                     decision=character())

ui <- fluidPage(

  actionButton("buttonNext", "Next"),

  radioButtons("radio", "Your Decision:",
           choices = c("No Decision" = 'NoDec', "Yes" = 'yes', "No" = 'no'),
           selected = 'NoDec'),

  plotOutput("TimeSeriesPlot")
)

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

  clickNext <- reactive({
    isolate(input_radio <- input$radio)
    randomNumber <- input$buttonNext
    print(c(input$buttonNext,randomNumber,input$radio))
    return(randomNumber)
  })

  observeEvent(input$buttonNext,
           {
             updateRadioButtons(session,'radio',selected = -1)
           })

  output$TimeSeriesPlot <- renderPlot({

    i <- clickNext()
    a <- plot(i)
    results <-   data.frame(times=Sys.time(),inputs=input$buttonNext,random=clickNext(),
  decision=input$radio)

    # with <<- you  make sure the variable is updated outside of the scope of the function
    resultData <<- rbind(resultData,results)
    saveRDS(resultData, file = "data/resultData.rds")
  })

  # alterantive way to save data, when the app is ended
  # session$onSessionEnded({
  #   saveRDS(resultData, file = "data/resultData.rds")
  #   stopApp
  # })
}
shinyApp(server = server, ui = ui)

# analyse <- readRDS(file = "data/resultData.rds")

如果您希望我扩展上述任何内容,请与我们联系。