Come aggiungere Update (Aggiorna) per l'app.R

0

Domanda

Ho aggiunto il pulsante, ma i valori cambieranno automaticamente prima che mi ha colpito di Aggiornamento "Ordine", non so come risolvere il problema. Dovrebbe essere come questo:inserire descrizione immagine quiSotto è il mio codice:

library(shiny)
ui <- fluidPage(
 titlePanel("My Simple App"),
 
 sidebarLayout(
   sidebarPanel(
     helpText("Controls for my app"),
     
     selectInput("fruitchoice", 
                 label = "Choose a fruit",
                 choices = list("Apples", 
                                "Oranges",
                                "Mangos", 
                                "Pomegranate"),
                 selected = "Percent White"),
     
     sliderInput("amt", 
                 label = "Order Amount:",
                 min=0, max = 100, value=20),
     
     actionButton ("Update","Update Order")
   ),
   
   mainPanel(
     helpText("Fruit Chosen:"),
     verbatimTextOutput("fruit"),
     helpText("Order Amount"),
     verbatimTextOutput("amt")
   )
 )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

   SelectInput <- eventReactive (input$Update , {
   runif(input$fruitchoice,amt)
  })
   output$fruit = renderText(input$fruitchoice)
   output$amt = renderText(input$amt)
}
# Run the application 
shinyApp(ui = ui, server = server)
r shiny
2021-11-24 05:38:40
2
0

Vi mostrerò, come riscrivere il codice per ottenere questo aggiornamento comportamento, tuttavia vorrei anche farti sapere che questa parte di codice:

SelectInput <- eventReactive (input$Update , {
   runif(input$fruitchoice,amt)
  })

È sbagliato per tre motivi: (1) l'oggetto amt non esiste, probabilmente si desidera input$amt; (2) anche se si cambia amt per input$amt codice non funziona e si otterrà l'errore; (3) ora non si sta utilizzando SelectInput in qualsiasi posto nella vostra applicazione, quindi non c'è motivo per questa parte, esiste, tuttavia, come non so qual è il tuo obiettivo e come sarà l'aspetto dell'applicazione finale, non sto dicendo questo in genere è sbagliato.

Ok, ora su questo pulsante aggiorna. Ci concentreremo su questo codice:

output$fruit = renderText(input$fruitchoice)
   output$amt = renderText(input$amt)

Qui si indica il programma di (ri)il rendering di testo quando input$fruitchoice o (nella seconda riga) quando input$amt il cambiamento, ma si vuole (ri)il rendering di testo solo quando l'utente fa clic sul pulsante, quindi hai bisogno di due cose: - primo, assicurarsi che l'utente ha cliccato il pulsante e non (ri)il rendering di testo quando uno dei input$ i cambiamenti. Questo lavoro:

output$fruit = renderText({
    req(input$Update)
    isolate(input$fruitchoice)
    })
  output$amt = renderText({
    req(input$Update)
    isolate(input$amt)
    })

Se ho capito Lucido correttamente, isolate() fa in modo che il testo non è (ri)per il rendering quando input$ modifiche (ma ha al suo interno i nuovi valori) e req() fa in modo che il input$Update é stata cliccata; e quando viene premuto di nuovo, Lucido ricalcola gli [(ri)rende] testo. Si ricalcola gli, poiché non abbiamo utilizzato isolate() su input$Update Penso che.

2021-11-24 09:37:42
0

C'è un paio di cose di sbagliato nel codice. Darò un po ' di spiegazione per ognuno di essi:

L'inizializzazione con reattivi ingressi. Utilizzando renderText(input$...) si crea un output di testo che si aggiorna automaticamente quando il vostro ingresso aggiornamenti. Automaticamente è qui il problema, non si desidera che. Stiamo per scrivere un metodo alternativo che memorizza gli ingressi in una variabile separata che ci consentono solo di essere aggiornato quando viene premuto il pulsante. Inizializziamo la variabile in questo modo:

rv <- reactiveValues(fruit = "Apples",
                       amt = 20)

EventReactive crea un reattivo variabile che può essere utilizzato successivamente nel codice. In generale ciò che si desidera utilizzare in questo tipo di scenari observeEvent. Si può procedere in questo modo:

observeEvent (input$Update , {
    rv$fruit <- input$fruitchoice
    rv$amt <- input$amt
  })

Ora abbiamo una lista di variabili sotto il nome di "rv" e un observeEvent che gli aggiornamenti di questa variabile ogni volta che il pulsante viene premuto. Tutto ciò che resta da fare è creare la renderText che si può fare in questo modo:

output$fruit <- renderText(rv$fruit)
output$amt <- renderText(rv$amt)
2021-11-24 10:22:43

Non è un comportamento sbagliato a mettere render* all'interno observe o reactive? I. e. generalmente la nidificazione attiva e reattiva?
gss

Credo che non è l'ideale. Voglio aggiornare con il pieno osservare/reactiveVal risposta
Wietse de Vries

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................