Относительно 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())
})
}
)
Большое спасибо.