我正在尝试使用R shiny构建动态textInput。用户应该在文本字段中写入,然后按下添加按钮以填充另一个字段。但是,每次按下按钮时,所有字段都变为空,就像我必须提前定义我想要的字段数一样。任何帮助将非常感激。
谢谢
这是我的代码:
library(shiny)
shiny::runApp(list(
ui = pageWithSidebar(
headerPanel("test"),
sidebarPanel(
helpText("Alternatives list"),
verbatimTextOutput("summary")
),
mainPanel(
actionButton("obs","add"),
htmlOutput("selectInputs")
)
)
,
server = function(input,output){
observe({
if (input$obs == 0)
return()
isolate({
output$selectInputs <- renderUI({
if(!is.null(input$obs))
print("w")
w <- ""
for(i in 1:input$obs) {
w <- paste(w,textInput(paste("a",i,sep=""),paste("a",i,sep="")))
}
HTML(w)
})
output$summary <- renderPrint({
print("your Alternative are:")
for(i in 1:input$obs) {
print(
input[[sprintf("a%d",i)]]
)
}
})
outputOptions(output, 'selectInputs', suspendWhenHidden=FALSE)
})
})
}))
答案 0 :(得分:6)
您的问题是每次单击按钮时都会重新生成所有按钮(因此输入$ aX)。并且它们默认生成时没有值,这就是为什么当你读它们时它们都是空的。
例如,如果你在output$selectInputs
代码中压制循环,你可以看到你的错误:(但现在它只允许你设置每个aX只有一次。)
output$selectInputs <- renderUI({
if(!is.null(input$obs))
print("w")
w <- ""
w <- paste(w, textInput(paste("a", input$obs, sep = ""), paste("a", input$obs, sep = "")))
HTML(w)
})
保持你的代码(然后保持所有按钮的重生),你应该添加每个textInput的值参数他的“自己的值”(实际上,具有相同id的旧输入的值){{1 }}:
value = input[[sprintf("a%d",i)]]