reciclar - como restaurar un marco de madera
R Brillo: ¿Cómo actualizar un marco de datos reactivo cada vez que se presiona un botón de acción sin crear un nuevo marco de datos reactivo? (1)
Mi aplicación brillante permite al usuario cargar un csv utilizando fileInput y almacenado como un objeto reactivo df_data. Luego creé una entrada numérica para que el usuario ingrese un número de fila para eliminar del marco de datos. Sin embargo, recibí un error sobre la evaluación anidada demasiado: ¿Recursión / opciones infinitas (expresiones =)? .
A continuación se muestra mi código para ui.R.
shinyUI(fluidPage(
titlePanel("amend data frame"),
mainPanel(
fileInput("file", "Upload file"),
numericInput("Delete", "Delete row:", 1, step = 1),
actionButton("Go", "Delete!"),
tableOutput("df_data")
)
))
Y debajo está mi código para server.R.
shinyServer(function(input, output) {
df_data <- reactive({
read.csv(input$file$datapath)
})
df_data <- eventReactive(
input$Go,
df_data()[-input$Delete,]
)
output$df_data <- renderTable(df_data())
})
Resolví el problema asignando el marco de datos subcontratado a un nuevo marco de datos reactivo llamado, por ejemplo, df_data2. Pero quiero que el usuario pueda seguir eliminando filas diferentes ingresando valores en Eliminar fila y presionando el botón Ir . Entonces esta solución no funcionará, ya que tendré que asignar df_data3, df_data4 ... y no pude predecir de antemano cuántas veces el usuario presionará el botón Ir .
Soy un usuario nuevo de brillosos durante aproximadamente 2 semanas y he estado buscando soluciones al respecto durante una semana. Hay alguien que pueda ayudarme? Un millón de gracias !!
A continuación se muestra una solución de trabajo. Creé un valor reactiveValues
para almacenar el marco de datos. Cuando se elige un archivo, el marco de datos se llena. Cuando se presiona el botón de eliminar, ese mismo marco de datos se borra una fila. La tabla siempre genera lo que sea que esté sosteniendo el objeto de marco de datos. Espero que este código sea un buen material de aprendizaje.
runApp(shinyApp(
ui=(fluidPage(
titlePanel("amend data frame"),
mainPanel(
fileInput("file", "Upload file"),
numericInput("Delete", "Delete row:", 1, step = 1),
actionButton("Go", "Delete!"),
tableOutput("df_data_out")
)
)),
server = (function(input, output) {
values <- reactiveValues(df_data = NULL)
observeEvent(input$file, {
values$df_data <- read.csv(input$file$datapath)
})
observeEvent(input$Go, {
temp <- values$df_data[-input$Delete, ]
values$df_data <- temp
})
output$df_data_out <- renderTable(values$df_data)
})))