需要在Shiny中为多个输出使用相同的输入

时间:2016-01-19 14:25:41

标签: r render shiny

我尝试使用Shiny中的标签对应用进行编码,该标签引用了文本框中的相同输入。

输入:

column(2, textInput(inputId = "sh1", label = "Stakeholder #1's name"))

输出:

tabPanel("#1 vs #2",
                          fluidRow(
                              column(3),
                              column(2, textOutput(outputId = "sh1o")),
                              column(2, "vs"),
                              column(2, textOutput(outputId = "sh2o"))
                          ),

tabPanel("#1 vs #3",
                          fluidRow(
                              column(3),
                              column(2, textOutput(outputId = "sh1o")),
                              column(2, "vs"),
                              column(2, textOutput(outputId = "sh3o"))
                          ),

渲染:

output$sh1o <- renderText(input$sh1)

据我所知,Shiny不会允许输入多次使用。

有没有办法让这项工作?

是否可以将相同的输入分配给临时变量,然后分配给输出?

1 个答案:

答案 0 :(得分:2)

Shiny允许输入被多次使用,但是你不能对输出元素使用相同的outputId。您可以先通过添加标签名称重命名textOutput outputId,以使其唯一。

以下是一个例子:

library(shiny)
ui<-shinyUI(pageWithSidebar(
        headerPanel("Test"),
        sidebarPanel(textInput(inputId = "sh1", label = "Stakeholder #1's name")),
                mainPanel(
        tabsetPanel(
                tabPanel("#1 vs #2",
                         fluidRow(
                                 column(3),
                                 column(2, textOutput(outputId = "tab1_sh1o")),
                                 column(2, "vs"),
                                 column(2, textOutput(outputId = "tab1_sh2o"))
                         )),

                         tabPanel("#1 vs #3",
                                  fluidRow(
                                          column(3),
                                          column(2, textOutput(outputId = "tab2_sh1o")),
                                          column(2, "vs"),
                                          column(2, textOutput(outputId = "tab2_sh3o"))
                                  )
        )
))))

server <- function(input,output,session){
        output$tab1_sh1o <- renderText(input$sh1)
        output$tab1_sh2o <- renderText(input$sh1)
        output$tab2_sh1o <- renderText(input$sh1)
        output$tab2_sh3o <- renderText(input$sh1)
}
shinyApp(ui,server)