Ich habe ein Problem mit der Verwaltung eines dynamischen data.frame in meiner Shiny App erstellt. Problem ist, da es über den Server.R behandelt wird, kann ich keinen Weg finden, darauf zuzugreifen, es in einen Vektor flach zu machen und es dann nach meinen anderen Variablen zu schreiben (die alle Text/numerische Eingaben sind).Schreiben flatten data.frame in .csv von einer glänzenden App
Arbeiten App kann hier abgerufen werden: https://samtre.shinyapps.io/fichier_test/
Die data.frame in erzeugt wird - "- Artikel im facturer 4" "5 Entrez le détail de chaque Punkt", wenn eine Zahl größer als 1 bei der Auswahl.
Hier ist der Code in der server.R, die eine dynamische Anzahl von Eingängen Griffe erstellen:
output$item_des <- renderUI({
numIndividuals <- as.integer(input$numIndividuals)
lapply(1:numIndividuals, function(i) {
textInput(inputId = paste0("item_des", i), label = paste("Description", i))
})
})
output$item_qua <- renderUI({
numIndividuals <- as.integer(input$numIndividuals)
lapply(1:numIndividuals, function(i) {
numericInput(inputId = paste0("item_qua", i), label = paste("Quantité", i), value = 1, min = 1)
})
})
output$item_pri <- renderUI({
numIndividuals <- as.integer(input$numIndividuals)
lapply(1:numIndividuals, function(i) {
textInput(inputId = paste0("item_pri", i), label = paste("Prix", i))
})
})
Hier ist der Code in server.R, die die data.frame aus dem obigen schafft:
output$item_tous <- renderTable({
num <- as.integer(input$numIndividuals)
data.frame(cbind(
lapply(1:num, function(i) {
input[[paste0("item_des", i)]]
}),
lapply(1:num, function(i) {
input[[paste0("item_qua", i)]]
}),
lapply(1:num, function(i) {
input[[paste0("item_pri", i)]]
})
))
}, colnames = FALSE, bordered = TRUE, digits = 0)
Und schließlich der Code in server.R, die die CSV schreibt:
formData <- reactive({
data <- sapply(fieldsAll, function(x) input[[x]])
data <- t(data)
data
})
saveData <- function(data) {
fileName <- sprintf("%s.csv",
input$res_fac)
write.csv(x = data, file = file.path(responsesDir, fileName),
row.names = FALSE, quote = TRUE)
}
Wo "fieldsAll" ist eine Liste aller zu schreibenden Eingaben. Es ist nach denjenigen, die Ich mag würde meinen Flatten data.frame schreiben:
fieldsAll <- c("per_nom", "per_tel", "per_dep", "fac_nom", "fac_adr", "res_dat",
"res_heu", "res_jou", "res_qua", "res_loc", "res_fac", "numIndividuals")
Ich habe für eine lange Zeit auf diesem Problem stecken geblieben. Original-Code ein Google-Formular mimick ist aus: https://www.r-bloggers.com/mimicking-a-google-form-with-a-shiny-app/
Während Original-Code für die data.frame Erstellung finden Sie hier (Christopherlovell Antwort): Create dynamic number of input elements with R/Shiny
Dank!
Hallo Bertil, alles hat gut funktioniert! Vielen Dank. –