微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法根据 R Shiny 中选定的 tabPanel 更新 tabsetPanel 中的 sliderInput 的输入?

如何解决有没有办法根据 R Shiny 中选定的 tabPanel 更新 tabsetPanel 中的 sliderInput 的输入?

我们尝试使用 R Shiny 进行基于三种不同场景的 Covid-19 模拟。 所有场景都从滑块输入获得不同的认值,需要根据所选设置和(附加)用户输入将其传递给服务器功能

我的 UI 中有以下 tabSetPanel:

tabsetPanel(id = "inTabset",selected = NULL,tabPanel("Großraumbuero",fluidRow(
                      column(4,sliderInput("people","Personen im Raum:",2,15,8)),column(4,sliderInput("raum","Raumgröße (in m²):",10,35,25)),sliderInput("zeit","Aufenthaltsdauer (in Std.):",1,16,)),tabPanel("Bar",sliderInput("people2",15)),23)),6)),tabPanel("Zug",sliderInput("people3",4)),10)),))

并在我的 R 服务器中尝试此操作:

observeEvent(input$inTabset,{
    if (input$inTabset == "Zug") {
      num_people <- input$people3
    } else if (input$inTabset == "Bar") {
      num_people <- input$people2
    } else if (input$inTabset == "Großraumbuero") {
      num_people <- input$people
    }
      
}
)
paste(num_people)

然而,这并没有提供用户界面所追求的价值。我尝试了几种方法,但都没有将值从我的 people[2|3] 输入传递给用户输入或选项卡选择时的 num_people 变量。

非常感谢,希望有办法实现这一点。

解决方法

您的变量 num_people 仅在观察者内部可用。如果你想在外面,你可以创建一个 reactiveVal 对象。试试这个

server <- function(input,output,session) {
  numpeople <- reactiveVal(0)
  observeEvent(input$inTabset,{
    if (input$inTabset == "Zug") {
      num_people <- input$people3
    } else if (input$inTabset == "Bar") {
      num_people <- input$people2
    } else if (input$inTabset == "Großraumbuero") {
      num_people <- input$people
    }
    numpeople(num_people)
    print(num_people)
  })
  observe(print(numpeople()))
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。