我的目标是将选择输入中的值填充到文本输入中。用户以后应该能够修改文本输入。不幸的是,我的应用程序不起作用(选择未填写)但没有错误。
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'])
})
})
任何可能出错的想法?
答案 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'])
})
})
)