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 value
nicht 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 value
aktualisiert 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