【发布时间】:2019-06-29 18:43:04
【问题描述】:
我正在使用 renderUI 在我的 UI 上创建动态文本框和下拉菜单。我想捕捉文本框/下拉菜单中的变化事件并修改数据框
下面是创建用户界面的代码
server <- function(input, output, session){
output$fileContent <- renderTable({
inFile <- input$csvFile
csvContent <- read.csv(inFile$datapath)
output$summary <- renderPrint({str(csvContent)})
allColumns <- names(csvContent)
types <- sapply(csvContent, class)
w <- ""
for (i in 1:length(allColumns)){
w <- paste(w, selectInput(paste("inp",allColumns[i], sep = "_"), allColumns[i],choices = c("factor","integer","logical","character", "Date"), selected = types[i], width = 200))
}
output$columns <- renderUI({ HTML(w) })
return (head(csvContent))
})
期望的输出 -
上面的代码在 UI 上根据需要呈现文本框,但不会捕获文本框中值更改的事件。由于控件是动态的,我不能为静态捕获事件编写代码,因为控件名称将动态生成
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。你想要的行为到底是什么?尝试制作一个不依赖于用户上传文件的示例,以便我们更轻松地提供帮助。
-
嗯,顺便说一句:你在
renderTable()中有renderUI(),...这是故意的吗?关于您的问题:您可以做的是保存动态生成的名称。在reactiveValues()中输入paste("inp",allColumns[i], sep = "_"),....并从那里获取名称,...如果您需要更具体的帮助,您可能应该遵循 MrFlick 的建议,... -
感谢您的回复。如何添加动态控件 reactiveValues?
标签: r dynamic shiny selectinput