Cómo agregar Update (Actualizar) para la aplicación.R

0

Pregunta

He añadido el botón, pero los valores cambiarán automáticamente antes de que me pegues "Fin de Actualizar", no sé cómo solucionarlo. Debe ser como este:introduzca descripción de la imagen de aquíAbajo es mi código:

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

Voy a mostrar, cómo reescribir el código para obtener este comportamiento de la actualización, sin embargo, me gustaría recibir también sabemos que esta parte del código:

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

Es incorrecta por tres razones: (1) objeto de amt no existe, es probable que desee input$amt; (2) incluso si cambia amt a input$amt código no funciona y usted obtendrá un error; (3) ahora, usted no está utilizando SelectInput en cualquier lugar en su aplicación, así que no hay razón para que esta parte existe, sin embargo, como no sé cuál es su objetivo y cómo se verá el final de la aplicación, no estoy diciendo que esto es generalmente mal.

Ok, así que ahora sobre este botón actualizar. Nos centraremos en este código:

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

Aquí instruir a los programa para la (re)procesamiento de texto cuando input$fruitchoice o (en la segunda línea) cuando input$amt cambiar, pero usted quiere (re)procesamiento de texto sólo cuando el usuario hace clic en el botón, por lo que necesita dos cosas: en primer lugar, asegúrese de que el usuario ha hecho clic en el botón y no (re)procesamiento de texto cuando uno de input$ cambios. Esto va a funcionar:

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

Si entiendo Brillante correctamente, isolate() se asegura de que el texto no es (re)de representación cuando input$ cambios (sin embargo, se ha internamente los nuevos valores) y req() se asegura de que el input$Update se hizo; y cuando se hace clic de nuevo, Brillante recalcula [(re)hace que] el texto. Se calcula de nuevo, porque no la usamos isolate() en input$Update Creo que.

2021-11-24 09:37:42
0

Hay un par de cosas mal en el código. Voy a dar un poco de explicación de cada uno:

Está inicializando con reactivos insumos. Mediante el uso de renderText(input$...) crear una salida de texto que actualiza automáticamente cuando el nivel de entrada de las actualizaciones. Automáticamente es el problema aquí, usted no quiere eso. Vamos a escribir un método alternativo que almacena las entradas en una variable independiente que sólo nos permiten ser actualizado cuando se pulsa el botón. Inicializamos la variable así:

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

EventReactive crea un reactivo variable que puede ser utilizada más tarde en el código. En general se habla de lo que usted desea utilizar en este tipo de escenarios es observeEvent. Puedes hacerlo así:

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

Ahora tenemos una lista de variables bajo el nombre de "rv" y un observeEvent que las actualizaciones de esta variable cada vez que el botón se pulsa. Todo lo que queda por hacer es crear la renderText que se puede hacer así:

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

No es el mal comportamiento de poner render* dentro de observe o reactive? I. e. generalmente anidación activo-reactivo?
gss

Supongo que no es lo ideal. Voy a actualizar con la plena observar/reactiveVal respuesta
Wietse de Vries

En otros idiomas

Esta página está en otros idiomas

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