闪亮:如何保存多个页面的输入?

时间:2018-05-22 17:45:30

标签: r shiny save

关于Shiny:

我想要几个人类编码器对100种不同的文本进行评分。 在每个页面上应该只有一个简单的下拉菜单,其中包含可用的评分。 我可以用一个简单的"提交"来实现这个单页/文本。按钮和答案保存在单个csv文件中。

但现在我想对所有100个文本进行概括 - 以便每个页面都显示一个新文本(我会将其作为for循环实现?)并希望将所有100个答案保存在一个.csv-中文件。

我是Shiny的新手(但在R中并不是那么糟糕),但找不到同时提供这两种功能的功能 - 多个页面和多个保存的输入。

我的当前代码对于单个页面看起来像这样(主要受https://deanattali.com/2015/06/14/mimicking-google-form-shiny启发):

humanTime <- function() format(Sys.time(), "%Y%m%d-%H%M%OS")

fieldsMandatory <- c("new_info", "agreement", "rating")

fieldsAll <- c("new_info", "agreement", "rating")
responsesDir <- file.path("responses")
epochTime <- function() {
  as.integer(Sys.time())
}

shinyApp(
  ui = fluidPage(
    shinyjs::useShinyjs(),

    titlePanel("Kommentarbewertungen Spiegel Online - Pre-Test"),
    mainPanel("This is the main panel"), 
    br(),
    code(text[1]),
    br(),
    div(
      id = "form", align="center",
      selectInput("new_info", "Bringt der Kommentar neue Informationen ein?",
                  c("","0 - nein", "1 - ja", "2 - unentschlossen")),
      selectInput("agreement", "Stimmen Sie dem Kommentar zu?",
                  c("","0 - nein", "1 - ja", "2 - unentschlossen")),
      selectInput("rating", "Bewerten Sie die Qualitaet des Kommentars auf einer Skala von 1 bis 5",
                  c("","1 - sehr schlecht", "2 - schlecht", "3 - mittel", "4 - gut", "5 - sehr gut")),
      actionButton("submit", "Submit", class = "btn-primary")
    ),
    br(),
    actionButton("prevBtn", "< Previous"),
    actionButton("nextBtn", "Next >")


  ),
  server = function(input, output, session) {
    observe({
    # check if all mandatory fields have a value
    mandatoryFilled <-
      vapply(fieldsMandatory,
             function(x) {
               !is.null(input[[x]]) && input[[x]] != ""
             },
             logical(1))
    mandatoryFilled <- all(mandatoryFilled)

    # enable/disable the submit button
    shinyjs::toggleState(id = "submit", condition = mandatoryFilled)
  })

    formData <- reactive({
      data <- sapply(fieldsAll, function(x) input[[x]])
      data <- c(data, timestamp = epochTime())
      data <- t(data)
      data
    })

    saveData <- function(data) {
      fileName <- sprintf("%s_%s.csv",
                          humanTime(),
                          digest::digest(data))

      write.csv(x = data, file = file.path(responsesDir, fileName),
                row.names = FALSE, quote = TRUE)
    }

    # action to take when submit button is pressed
    observeEvent(input$submit, {
      saveData(formData())
    })
  }
)

非常感谢。

1 个答案:

答案 0 :(得分:0)

我会将提交按钮用作活动。正如您在按下此按钮时说的那样,用户的输入被保存到csv文件中,为什么不继续添加相同的csv?

 observeEvent(input$SubmitButton, {

 Test<-c(input$rating, input$blah, input$blah)

 write.table(Test, "Test.csv", row.names=F, sep=",",col.names=F,append=T)

 #code to advance to next text
 }

用户按下提交后,自动将闪亮提升到下一页,当用户再次输入时,按下提交,csv将自动打开并添加新输入。只要文本出现的顺序是一致的,您应该将所有答案保存在一个csv中。

注意:我使用.csv的写表,所以我可以在excel中轻松打开。 (我希望这有帮助)