Comment ajouter de mise à Jour (Actualisation) Bouton de l'application.R

0

La question

J'ai ajouté le bouton, mais les valeurs seront automatiquement modifiés avant que je tape "mise à Jour de l'Ordre", je ne sais pas comment le résoudre. Devrait ressembler à ceci:entrez la description de l'image voicici-Dessous mon code:

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

Je vais vous montrer, comment réécrire votre code pour obtenir ce comportement de mise à jour, cependant, je voudrais aussi que vous sachiez que cette partie de code:

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

Est mauvais pour trois raisons: (1) l'objet amt n'existe pas, vous voulez probablement input$amt; (2) même si vous changez de amt pour input$amt le code ne fonctionne pas et vous obtiendrez une erreur; (3) maintenant, vous n'êtes pas à l'aide de SelectInput dans n'importe quel endroit dans votre application, donc il n'y a aucune raison pour que cette partie existe, cependant comme je ne sais pas quel est votre objectif et comment regarder la finale de l'app, je ne dis pas que c'est généralement mauvais.

Ok, alors maintenant, à propos de ce bouton mettre à jour. Nous allons nous concentrer sur ce code:

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

Ici vous instruire programme de (re)rendre le texte lors de l' input$fruitchoice (ou deuxième ligne) lorsque input$amt le changement, mais vous voulez (re)rendre le texte uniquement lorsque l'utilisateur clique sur le bouton, si vous avez besoin de deux choses: tout d'abord, assurez-vous que l'utilisateur a cliqué sur le bouton et de ne pas (re)rendre le texte lorsque l'un des input$ les changements. Cela va fonctionner:

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

Si je comprends Brillant correctement, isolate() permet de s'assurer que le texte n'est pas (re)rendu input$ les changements (mais il a l'interne les nouvelles valeurs) et req() permet de s'assurer que le input$Update il a cliqué; et lorsque vous cliquez à nouveau, Brillant recalcule [(re)rend] texte. Il recalcule, parce que nous n'avons pas utilisé isolate() sur input$Update Je pense que.

2021-11-24 09:37:42
0

Il y a quelques choses qui cloche dans votre code. Je vais donner un peu d'explication pour chacun d'eux:

Vous sont en cours d'initialisation avec le réactif entrées. En utilisant renderText(input$...) vous créez une sortie de texte qui se met à jour automatiquement lors de votre entrée de mises à jour. Automatiquement est le problème ici, vous ne voulez pas que. Nous allons écrire une méthode alternative qui stocke les entrées dans une variable distincte qui nous permettent seulement d'être mis à jour lorsque le bouton est enfoncé. Nous initialisons la variable comme ceci:

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

EventReactive crée un réactif de variables qui peuvent être utilisées plus tard dans le code. Généralement parlant de ce que vous souhaitez utiliser dans ce genre de scénarios observeEvent. Vous pouvez le faire comme ceci:

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

Nous avons maintenant une liste de variables sous le nom "rv" et un observeEvent que les mises à jour de cette variable à chaque fois que le bouton enfoncé. Tout ce qui reste à faire est de créer l' renderText ce que vous pouvez faire comme ceci:

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

N'est-il pas le mauvais comportement de mettre render* à l'intérieur de observe ou reactive? I. e. généralement nidification actif-réactif?
gss

Je suppose que c'est pas l'idéal. Je vais mettre à jour avec la pleine observation/reactiveVal répondre
Wietse de Vries

Dans d'autres langues

Cette page est dans d'autres langues

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