一个响应式函数可以交互显示在两个不同的页面上
One reactive function to be displayed on two different pages interactively
我有一个包含 3 个选项卡项的应用程序。我想在第二页上使用滑块以交互方式在第三页上显示相同的结果,即如果第二页滑块发生变化,那么第三页滑块也应该相应地发生变化。
我在服务器端有一个反应函数
choose_segment <- reactive({
Multiple conditions for dropdown{Due to security cant share the exact code.}
})
并且这个 choose_segment 在 UI 中引用过一次,现在我也想在第三页上使用它,但是当我在第三页上调用该函数时它没有显示任何内容ui 上的事情,也没有给出任何错误。
在 UI 中,它在 UIoutput.
中被调用
uiOutput(choose_segment())
我的观察:我认为根据我的研究我们不能直接调用一个函数两次,所以我正在做的是我做了两个不同的函数并从它们调用相同的函数,即
output$chooseSegment1 <- renderUI({
choose_segment()
})
output$chooseSegment2 <- renderUI({
choose_segment()
})
问题:它给了我输出,但它们都不是交互式的:(
请提供解决方案,以便我可以使两个滑块以交互方式工作。
我遇到过同样的情况,因为我想更改代码结构。
我将动态输出 ui 输出到下拉菜单 ob ui,然后在我的服务器中使用与在服务器上观察中的 Input$xyz 相同的方法,它对我有用。
代码:
UI : column(3, selectInput(inputId="ABC",label= "Choose ABC"))
column(3, selectInput(inputId="ABC1",label= "Choose ABC"))
Server : observe({
if(is.null(tab2_summary())) return(NULL)
updateSelectInput(session, "ABC", value = input$ABC)
})
observe({
updateSelectInput(session, "ABC1", value = input$ABC)
})
observe({
updateSelectInput(session, "ABC", value = input$ABC1)
})
这就是我能够在两个不同页面上使 selectInput 交互的方法。
供您参考,有一个完整的可重现代码。
请参考,
library(shiny)
# UI ----------------------------------------------------------
ui <- navbarPage("Navbar!",
tabPanel("Plot", sidebarLayout(sidebarPanel(
radioButtons("yaxis1", "y-axis", c("speed"="speed", "dist"="dist"),
selected = "speed"
)),
mainPanel( plotOutput("plot"),
textOutput("test2")))), # for input checking
tabPanel("Summary", sidebarLayout(sidebarPanel(
radioButtons("yaxis2", "grouping-var", c("speed"="speed", "dist"="dist")
)),
mainPanel(
verbatimTextOutput("summary"),
textOutput("test1")
)))
)
# Server ------------------------------------------
server <- function(input, output, session) {
observe({
x <- input$yaxis1
updateRadioButtons(session, "yaxis2", selected = x)
})
observe({
y <- input$yaxis2
updateRadioButtons(session, "yaxis1", selected = y)
})
# output$test1 <- renderPrint({cat("yaxis1", input$yaxis1)})
# output$test2 <- renderPrint({cat("yaxis2", input$yaxis2)})
# output$plot <- renderPlot({ plot(cars[['speed']], cars[[input$yaxis1]]) })
# output$summary <- renderPrint({ summary(cars[[input$yaxis2]]) })
}
shinyApp(ui, server)
希望对你有所帮助。
我有一个包含 3 个选项卡项的应用程序。我想在第二页上使用滑块以交互方式在第三页上显示相同的结果,即如果第二页滑块发生变化,那么第三页滑块也应该相应地发生变化。
我在服务器端有一个反应函数
choose_segment <- reactive({
Multiple conditions for dropdown{Due to security cant share the exact code.}
})
并且这个 choose_segment 在 UI 中引用过一次,现在我也想在第三页上使用它,但是当我在第三页上调用该函数时它没有显示任何内容ui 上的事情,也没有给出任何错误。 在 UI 中,它在 UIoutput.
中被调用uiOutput(choose_segment())
我的观察:我认为根据我的研究我们不能直接调用一个函数两次,所以我正在做的是我做了两个不同的函数并从它们调用相同的函数,即
output$chooseSegment1 <- renderUI({
choose_segment()
})
output$chooseSegment2 <- renderUI({
choose_segment()
})
问题:它给了我输出,但它们都不是交互式的:(
请提供解决方案,以便我可以使两个滑块以交互方式工作。
我遇到过同样的情况,因为我想更改代码结构。 我将动态输出 ui 输出到下拉菜单 ob ui,然后在我的服务器中使用与在服务器上观察中的 Input$xyz 相同的方法,它对我有用。 代码:
UI : column(3, selectInput(inputId="ABC",label= "Choose ABC"))
column(3, selectInput(inputId="ABC1",label= "Choose ABC"))
Server : observe({
if(is.null(tab2_summary())) return(NULL)
updateSelectInput(session, "ABC", value = input$ABC)
})
observe({
updateSelectInput(session, "ABC1", value = input$ABC)
})
observe({
updateSelectInput(session, "ABC", value = input$ABC1)
})
这就是我能够在两个不同页面上使 selectInput 交互的方法。 供您参考,有一个完整的可重现代码。 请参考,
library(shiny)
# UI ----------------------------------------------------------
ui <- navbarPage("Navbar!",
tabPanel("Plot", sidebarLayout(sidebarPanel(
radioButtons("yaxis1", "y-axis", c("speed"="speed", "dist"="dist"),
selected = "speed"
)),
mainPanel( plotOutput("plot"),
textOutput("test2")))), # for input checking
tabPanel("Summary", sidebarLayout(sidebarPanel(
radioButtons("yaxis2", "grouping-var", c("speed"="speed", "dist"="dist")
)),
mainPanel(
verbatimTextOutput("summary"),
textOutput("test1")
)))
)
# Server ------------------------------------------
server <- function(input, output, session) {
observe({
x <- input$yaxis1
updateRadioButtons(session, "yaxis2", selected = x)
})
observe({
y <- input$yaxis2
updateRadioButtons(session, "yaxis1", selected = y)
})
# output$test1 <- renderPrint({cat("yaxis1", input$yaxis1)})
# output$test2 <- renderPrint({cat("yaxis2", input$yaxis2)})
# output$plot <- renderPlot({ plot(cars[['speed']], cars[[input$yaxis1]]) })
# output$summary <- renderPrint({ summary(cars[[input$yaxis2]]) })
}
shinyApp(ui, server)
希望对你有所帮助。