R Shiny almacena la entrada del usuario de múltiples campos textAreaInput generados dinámicamente en un objeto en la parte del servidor
Nuevo enshiny
y luchando con esto por más de dos días. He creado una aplicación donde el usuario carga.csv
data y elige una o más variables cuyos nombres aparecen en la aplicación como casillas de verificación. Cuando se marca una casilla de verificación, aparece una nueva casilla de verificación debajo con el mismo nombre y cuando se hace clic también, untextAreaInput
aparece junto a él, donde el usuario puede agregar nombres de variables que constituyen la variable de destino como una escala. Aquí hay una versión simplificada de la aplicación:
library(shiny)
ui <- fluidPage(
mainPanel(
fileInput(inputId = "file", label = "Choose File", multiple = TRUE, accept = ".csv"),
uiOutput(outputId = "varCheckBoxesIndivScores"),
column(width = 3,
uiOutput(outputId = "selectedScoresCheckBoxes")),
conditionalPanel(condition = "input.selectedScoresCheckBoxes",
column(width = 6,
uiOutput(outputId = "variablesConstitutingScale"))
)
)
)
server = function(input, output, session) {
df <- reactive({
if(is.null(input$file)) {
return(NULL)
} else {
tbl <- fread(input$file$datapath, stringsAsFactors = TRUE)
return(tbl)
}
})
output$varCheckBoxesIndivScores <- renderUI({
if(is.null(df())) {
return(NULL)
} else if(!is.null(df())) {
return(tags$div(align = "left",
class = "multicol",
checkboxGroupInput(inputId = "varCheckBoxesIndivScores",
label = "Select variables",
choices = colnames(df()))))
}
})
output$selectedScoresCheckBoxes <- renderUI({
if(is.null(df())) {
return(NULL)
} else if(!is.null(df())) {
return(tags$div(align = "left",
checkboxGroupInput(inputId = "selectedScoresCheckBoxes",
label = "",
choices = input$varCheckBoxesIndivScores)))
}
})
output$variablesConstitutingScale <- renderUI({
if(is.null(df())) {
return(NULL)
} else if(!is.null(df()) & length(input$selectedScoresCheckBoxes > 0)) {
var.list.input.fields <- lapply(input$selectedScoresCheckBoxes, function(i) {
textAreaInput(inputId = "i", label = paste("Variables constituting scale", i), width = "700px", height = "100px", value = NULL)
})
var.list.input.fields
}
})
}
shinyApp(ui = ui, server = server)
Los datos a cargar se generan de esta manera (solo un extracto, el real tiene más columnas y casos):
library(data.table)
x <- data.table(ID = c(2201:2220), VAR1 = rnorm(n = 20, mean = 10, sd = 2),
VAR2 = rnorm(n = 20, mean = 100, sd = 20), VAR3 = 1:20, VAR4 = 21:40,
VAR5 = 41:60, VAR6 = 61:80, VAR7 = 81:100)
write.csv(x = x, file = "/tmp/test_data.csv", row.names = FALSE)
Funciona bien, sin errores. Así es como se ve, después de ingresar los nombres de las variables en cada una de las @ generadtextAreaInput
campos:
in embargo, me gustaría tomar la entrada del usuario de cada @ generado dinámicamentextAreaInput
y guárdelo en una lista como:
list(VAR1 = "VAR3 VAR4 VAR5", VAR2 = "VAR6 VAR7")
list(VAR1 = "VAR3", "VAR4", "VAR5", VAR2 = "VAR6", "VAR7")
dentro de la parte del servidor de la aplicación para uso futuro.
Intenté seguir la solución enest thread, pero no logré encontrar ninguna solución y me siento bastante confundido. ¿Alguien puede ayudar?