Como adicionar Update (Atualizar) para o aplicativo.R

0

Pergunta

Eu adicionei o botão, mas os valores serão automaticamente alteradas antes de eu bater "Atualizar Pedido", eu não sei como corrigi-lo. Deve ser como este:insira a descrição da imagem aquiAbaixo está o meu 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

Vou mostrar a você, como reescrever seu código para obter esta atualização de comportamento, no entanto, gostaria de também fazer você saber que esta parte do código:

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

É errado, por três razões: (1) o objeto amt não existe, você provavelmente quer input$amt; (2) mesmo se você alterar amt para input$amt o código não vai funcionar e você terá de erro; (3) agora você não estiver usando SelectInput em qualquer lugar em sua aplicação, portanto, não há razão para essa parte existe, no entanto, como eu não sei qual é seu objetivo e como vai ficar o final app, eu não estou dizendo que isto é geralmente errado.

Ok, então agora sobre este botão atualizar. Vamos concentrar-nos sobre este código:

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

Aqui você instruir o programa para (re)compor o texto quando input$fruitchoice ou (na segunda linha) quando input$amt mudar, mas você deseja (re)compor o texto apenas quando o usuário clica no botão, então você precisa de duas coisas - primeiro, certifique-se de que o usuário clicou no botão e não (re)compor o texto, quando um dos input$ alterações. Isso funcionará:

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

Se eu entender Brilhante corretamente, isolate() certifica-se de que o texto não é (re)processamento, quando input$ alterações (no entanto, ele tem internamente os novos valores) e req() certifica-se de que o input$Update foi clicado; e quando é clicado novamente, Brilhante recalcula [(re)compõe] texto. Recalcula, porque não usamos isolate() no input$Update Eu acho.

2021-11-24 09:37:42
0

Há algumas coisas de errado no código. Vou dar uma pequena explicação para cada um deles:

Você está inicializando com reativa entradas. Usando renderText(input$...) você cria uma saída de texto que atualiza automaticamente quando a entrada de atualizações. Automaticamente é o problema aqui, você não quer isso. Vamos escrever um método alternativo que armazena as entradas em uma variável separada que somente permitimos ser atualizado quando o botão é pressionado. Podemos inicializar variáveis, como por exemplo:

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

EventReactive cria um reativa variável que pode ser usado mais tarde no código. Geralmente falando o que você deseja usar neste tipo de cenários é observeEvent. Você pode fazer assim:

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

Agora temos uma lista de variáveis sob o nome de "rv" e um observeEvent que atualiza esta variável de cada vez que o botão fica pressionado. Tudo o que resta a fazer é criar o renderText o que você pode fazer assim:

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

Não é errado comportamento para colocar render* dentro observe ou reactive? I. e. geralmente aninhamento ativo-reativo?
gss

Eu acho que não é o ideal. Vou atualizar com o total de observar/reactiveVal resposta
Wietse de Vries

Em outros idiomas

Esta página está em outros idiomas

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