选择输入以填充Shiny中的文本框

时间:2014-09-23 13:28:57

标签: r shiny

我的目标是将选择输入中的值填充到文本输入中。用户以后应该能够修改文本输入。不幸的是,我的应用程序不起作用(选择未填写)但没有错误。

ui.R

library(shiny)

shinyUI(fluidPage(

    sidebarLayout(
        sidebarPanel(
            selectInput("id", 
                        label = "Choose a number",
                        choices = list()
            ),

            textInput("txt1", "number", 0)

        ),



        mainPanel(

        )
    )
))

server.R

df <- data.frame(a=c(1,2),b=c(3,4))

shinyServer(function(input, output, session) {
    # fill the select input
    updateSelectInput(session, "id", choices = df$a)

    observe({
        # When I comment this line, the select is correctly filled
        updateTextInput(session, "txt1", value = df[df$a==input$id,'a'])
    })

})

任何可能出错的想法?

1 个答案:

答案 0 :(得分:3)

您的代码对我的示例数据集不起作用,但适用于:

df <- data.frame(a=c("a","b"),b=c(3,4))

我的猜测是updateSelectInput()需要一个字符。但是,这不起作用:

updateSelectInput(session, "id", choices = as.character(df$a))

但是如果你将df定义为:

df <- data.frame(a=c("1","2"),b=c(3,4))

这很有效。该示例的完整代码:

library(shiny)

df <- data.frame(a=c("1","2"),b=c(3,4))

shinyApp(
  ui = shinyUI(fluidPage(
    sidebarLayout(
      sidebarPanel(
        selectInput("id", 
          label = "Choose a number",
          choices = list()
        ),
        textInput("txt1", "number", 0)
      ),
      mainPanel()
    )
  )),
  server = shinyServer(function(input, output, session) {
    updateSelectInput(session, "id", choices = df$a)

    observe({
      updateTextInput(session, "txt1", value = df[df$a==input$id,'a'])
    })
  })
)