Cum de a adăuga Actualizare (Refresh) pentru a app.R

0

Problema

Am adăugat butonul, dar valorile se vor schimba în mod automat înainte de a mă lovi "Actualiza", nu știu cum să-l repara. Ar trebui să fie ca aceasta:introduceți descrierea imaginii aicimai Jos este codul meu:

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

Eu vă va arăta, cum de a rescrie codul pentru a obține această actualizare de comportament, cu toate acestea, aș dori pentru a obține, de asemenea, știu că în această parte de cod:

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

Este greșit pentru trei motive: (1) obiect amt nu există, probabil vrei input$amt; (2) chiar dacă vă schimbați amt pentru a input$amt cod nu va functiona si vei primi eroare; (3) acum, nu utilizați SelectInput în orice loc în aplicația dvs., astfel încât nu există nici un motiv pentru această parte a exista, cu toate ca nu stiu care este scopul tău și de cum va arata la final app, eu nu spun că acest lucru este în general greșit.

Ok, deci acum despre această actualizare buton. Ne vom concentra pe acest cod:

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

Aici veți instrui programul sa (re)render text atunci când input$fruitchoice sau (în linia a doua), atunci când input$amt schimba, dar doriți să (re)render text doar atunci când utilizatorul face clic pe butonul, deci ai nevoie de două lucruri - în primul rând, asigurați-vă că utilizatorul a făcut clic pe butonul și nu (re)render text atunci când unul dintre input$ modificări. Acest lucru va funcționa:

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

Dacă am înțeles Strălucitoare corect, isolate() face sigur că textul nu este (re)redare atunci când input$ modificări (cu toate acestea are pe plan intern noile valori) și req() face sigur că input$Update a fost făcut clic, și atunci când este apăsat din nou, Strălucitor recomputes [(re)face] text. Se recomputes, pentru că nu am folosit isolate() pe input$Update Cred.

2021-11-24 09:37:42
0

Există câteva lucruri în neregulă în cod. Eu va dau un pic de o explicație pentru fiecare:

Ești inițializarea cu reactiv intrări. Prin utilizarea renderText(input$...) creați un text de ieșire, care se actualizează automat atunci când dvs. de intrare actualizări. Automat este problema aici, tu nu vrei asta. Am de gând să scrie o metodă alternativă care stochează intrări într-o altă variabilă care ne permite doar să fie actualizat, atunci când butonul este apăsat. Am inițializa variabila astfel:

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

EventReactive creează o reactive de variabile care pot fi utilizate ulterior în cod. În general vorbind, ce doriți să le utilizați în aceste scenarii este observeEvent. Puteți face acest lucru astfel:

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

Acum avem o listă de variabile sub numele de "rv" și o observeEvent care actualizează această variabilă de fiecare dată când butonul este apăsat. Tot ce este lăsat să faceți este de a crea renderText pe care le puteți face astfel:

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

Nu este comportamentul greșit de a pune render* în interiorul observe sau reactive? I. e. în general, cuiburi activ-reactive?
gss

Cred că nu e ideal. Eu va actualiza cu full observa/reactiveVal răspunde
Wietse de Vries

În alte limbi

Această pagină este în alte limbi

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