GOOGLE ADS

Samstag, 23. April 2022

Festlegen von Anfangswerten für eine verknüpfte Funktion in R Shinydashboard

Die Antwort auf die hier gestellte Frage hat mein anfängliches Problem beim Erstellen eines verknüpften sliderInput()und gelöst numericInput(), aber wenn ich diese Lösung implementiere, erhalte ich eine Fehlermeldung, die besagt, dass die Standardeinstellung valuenicht festgelegt wurde, was bedeutet, dass die sliderInput()nicht gerendert wird.

Sobald Sie eine Zahl in ändern oder eingeben numericInput(), beginnt das Ganze korrekt zu rendern, also funktioniert es offensichtlich, sobald das valueaktualisiert wird updateSliderInput()und updateNumericInput()funktioniert.

Was ich nicht herausfinden kann, ist, wie man den Anfangswert einstellt?

Der Code aus dieser Frage wird unten repliziert.

"ui.R"

library(shiny)
shinyUI(fluidPage(
uiOutput("Param_s"),
uiOutput("Param_n")
))

"server.R"

library(shiny)
shinyServer(
function(input,output,session) {
# Mutually dependent slider and numeric inputs
output$Param_s = renderUI({
sliderInput(inputId = "param_slide",
label= "My input parameter",
value= input$param_numeric,
min=1,
max=200)
})
output$Param_n = renderUI({
numericInput(inputId = "param_numeric",
label= "My input parameter",
value= input$param_slide,
min=1,
max=200)
})
updateSliderInput(session,"param_slide", value = 60)
updateNumericInput(session,"param_numeric", value = 60 )
})


Lösung des Problems

Das ist eine clevere Art, sie zu verknüpfen. Ich habe es mit ObserveEvent-Funktionen gemacht, die deutlich ungeschickter waren.

Was das Problem betrifft, denke ich, dass es dadurch verursacht wird, dass es keinen input$param_value gibt, wenn der Slider zum ersten Mal erstellt wird.

Sie können die Wertezeile für den Schieberegler durch Folgendes ersetzen:

value= if(!is.na(input$param_numeric)){input$param_numeric}else{60}

was für mich funktioniert und Sie Ihre Update-Anweisungen am Ende loswerden lässt. Obwohl für mich Ihr tatsächlicher Code auch zu funktionieren scheint, obwohl er eine Fehlermeldung in der Konsole ausgibt.

Edit: Ich habe mich geirrt, was los ist. Es funktioniert für mich so oder so und die if-Anweisung in meiner Antwort hat nicht geholfen. Meine if-Version funktioniert stattdessen mitexists:

value= if(exists('input$param_numeric')){input$param_numeric}else{60}

Aber da Ihr ursprünglicher Code für mich funktioniert, ist dies kein großer Beweis für irgendetwas

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...