Diciamo che ho il seguente file server.R a lucido:Impostare oggetto globale in Shiny
shinyServer(function(input, output) {
output$plot <- renderPlot({
data2 <- data[data$x == input$z, ] # subsetting large dataframe
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ] # same subset. Oh, boy...
summary(data2$x)
})
})
Cosa posso fare per non dover correre data2 <- data[data$x == input$z, ]
all'interno di ogni chiamata di rendering? Se faccio il seguente, ho un "oggetto di tipo 'chiusura' non è subsettable" Errore:
shinyServer(function(input, output) {
data2 <- reactive(data[data$x == input$z, ])
output$plot <- renderPlot({
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ]
summary(data2$x)
})
})
Che cosa ho fatto di sbagliato?
Grazie per l'aiuto, sono molto nuovo per Shiny (è il mio secondo giorno di lavoro con esso). La tua soluzione funziona, ma non quando inserisco un 'ifelse()' all'interno della mia routine secondaria, che è in realtà qualcosa del tipo: 'data2 <- reactive (ifelse (input $ z == '', dati, dati [dati $ x == input $ z,])) '. Quando faccio questo, ottengo il seguente errore: 'Errore in plot.window (xlim, ylim, log = log, ...): necessita di valori 'xlim' finiti'. –
BTW, ho terminato con il tutorial RStudio (almeno le parti di base) e intendo approfondire ulteriormente la documentazione del pacchetto con il tempo. –
@wleoncio quell'errore è quasi certamente perché stai passando un 'data.frame' vuoto per tracciare. Quindi suggerisco di fare un po 'di debug per capire se 'data2' restituisce ciò che ti aspetti. Puoi anche aggiungere dei controlli nella funzione di output della trama come 'if (nrow (newData) == 0) return()' che impedirà di tracciare se non ci sono dati. Mentre sto lavorando su un'app lucida, mi piace aggiungere una tabella, per essere commentata in seguito, che stamperà solo diversi valori di debug (cioè il numero di righe nei dati correnti, i livelli di una certa variabile, ecc.) –