La mia app lucida consente all'utente di caricare un csv utilizzando fileInput e memorizzato come oggetto reattivo df_data. Ho quindi creato un valore numericoInput per l'utente per immettere un numero di riga da eliminare dal frame di dati. Tuttavia, ho ricevuto un errore sulla valutazione nidificata troppo profondamente: ricorsione infinita/opzioni (espressioni =)?.R lucido: come ottenere un frame di dati reattivo aggiornato ogni volta premendo un pulsante di azione senza creare un nuovo frame di dati reattivi?
Di seguito è riportato il mio codice per 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")
)
))
E di seguito è il mio codice per 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())
})
ho risolto il problema assegnando il frame di dati subsetted in un frame di dati reattiva chiamata, per esempio, df_data2. Ma voglio rendere l'utente in grado di continuare a cancellare righe diverse inserendo valori in Elimina riga e premere il pulsante Go. Quindi questa soluzione non funzionerà dato che dovrò assegnare df_data3, df_data4 ... e non potrei prevedere in anticipo quante volte l'utente preme il pulsante Go.
Sono un nuovo utente brillante per circa 2 settimane e sono stato alla ricerca di soluzioni su questo per una settimana. C'è qualcuno che può aiutarmi? Un milione di ringraziamenti !!
Grazie! Funziona molto bene! Vorrei inoltre chiedere perché sia necessario usare 'observEvent()' ma non 'observ()'. Qual è la differenza tra i due? Grazie! –
Si potrebbe usare regolarmente 'osserva'. La differenza principale è che "observEvent" prende come argomento ciò che è reattivo all'ascolto, quindi qualsiasi altro valore reattivo all'interno dell'espressione è di default isolato. Inoltre, non viene infornato quando il reattivo è NULL, che è spesso quello che vuoi quando si ha a che fare con gli input (altrimenti di solito si finisce con la prima riga all'interno di 'observ' essendo' if (is.null (input $ xxx)) return() ') –
Grazie mille. Le tue risposte sono davvero dettagliate e chiare! –