Uygulamaya Güncelleme (Yenile) Düğmesi nasıl eklenir.R

0

Soru

Düğmeyi ekledim ancak "Siparişi Güncelle" ye basmadan önce değerler otomatik olarak değişecek, nasıl düzelteceğimi bilmiyorum. Şöyle olmalı: resim açıklamasını buraya girin Aşağıda kodum var:

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

Bu güncelleme davranışını elde etmek için kodunuzu nasıl yeniden yazacağınızı göstereceğim, ancak kodun bu bölümünü de bilmenizi isterim:

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

Üç nedenden dolayı yanlış: (1) nesne amt yok, muhtemelen istiyorsun input$amt; (2) değişseniz bile amt -e doğru input$amt kod çalışmaz ve hata alırsınız; (3) şimdi kullanmıyorsunuz SelectInput uygulamanızın herhangi bir yerinde, bu bölümün var olması için hiçbir neden yoktur, ancak amacınızın ne olduğunu ve son uygulamanın nasıl görüneceğini bilmediğim için, bunun genellikle yanlış olduğunu söylemiyorum.

Tamam, şimdi bu güncelleme düğmesi hakkında. Bu koda odaklanacağız:

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

Burada (re)metin işlemek için program isteyin input$fruitchoice veya (ikinci satırda) ne zaman input$amt değiştir, ancak metni yalnızca kullanıcı düğmeyi tıklattığında (yeniden)işlemek istersiniz, bu nedenle iki şeye ihtiyacınız vardır-ilk olarak, kullanıcının düğmeyi tıklattığından ve aşağıdakilerden biri olduğunda metni (yeniden)oluşturmadığından emin olun input$ değişimler. Bu işe yarayacak:

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

Parlak eğer doğru anladıysam , isolate() metnin ne zaman (yeniden)oluşturulmadığından emin olur input$ değişiklikler (ancak dahili olarak yeni değerlere sahiptir) ve req() emin olur input$Update tıklandı; ve tekrar tıklandığında, Shiny [(yeniden)render] metnini yeniden hesaplar. Yeniden hesaplar, çünkü kullanmadık isolate() üzerinde input$Update Bence.

2021-11-24 09:37:42
0

Kodunda bir kaç yanlışlık var. Her biri için biraz açıklama yapacağım:

Reaktif girdilerle başlatıyorsunuz. Kullanarak renderText(input$...) girişiniz güncellendiğinde otomatik olarak güncellenen bir metin çıktısı oluşturursunuz. Otomatik olarak sorun burada, bunu istemezsin. Girdileri yalnızca düğmeye basıldığında güncellenmesine izin verdiğimiz ayrı bir değişkende depolayan alternatif bir yöntem yazacağız. Bu değişkeni şu şekilde başlatıyoruz:

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

EventReactive daha sonra kodda kullanılabilecek reaktif bir değişken oluşturur. Genel olarak konuşursak, bu tür senaryolarda kullanmak istediğiniz şey observeEvent. Bu yüzden bu gibi yapabilirsin :

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

Şimdi "rv" adı altında değişkenlerin bir listesi var ve observeEvent bu, düğmeye her basıldığında bu değişkeni günceller. Yapmanız gereken tek şey yaratmaktır renderText bunu böyle yapabilirsin.:

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

Yok ben yanlış davranış için render* içinde observe veya reactive? Yani genellikle aktif-reaktif yuvalama?
gss

Sanırım ideal değil. Tam gözlem / yeniden etkinleştirme cevabı ile güncelleyeceğim
Wietse de Vries

Diğer dillerde

Bu sayfa diğer dillerde

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