在 R Shiny 中,当使用 renderUI/uiOutput 动态生成控件集时,如何通过引发事件来获取这些值或填充输入?
In R Shiny, when using renderUI/uiOutput to dynamically generate sets of controls, how can I harvest those values or populate input by causing events?
问题
在 R Shiny 中,当使用
- 渲染UI
- ui输出
动态生成控件集,例如:
- 复选框
- 单选按钮
- 文本框
如何通过引发事件来获取这些值或填充输入?
按原样,那些生成的控件似乎是“仅显示”。创建一个 selection、标记一个复选框或输入数据只会更新显示,但不会创建任何事件,并且不会将值填充到“输入”变量 ( ReactiveValues ) 中;因此,闪亮的服务器进程没有收到任何东西。
如果这些控制输入实际上是隔离的,则完全破坏了动态创建控件的意义。
显然,我希望这个问题已经得到解决,但我的搜索没有找到它。
在我的具体案例中,UI 允许用户:
- Select 并上传 CSV 文件。
- 该逻辑识别数值列、日期列和分组列,并生成 3 组单选按钮控件集。这个想法是您选择您感兴趣的列。
- 选择一个分组列应该return columnID 返回到服务器,在那里它会显示一个离散的组列表,select。这失败了,因为 select 离子不会生成事件,并且输入变量(提供给 server.R)仅包含来自静态控件的 ReactiveValues。
也就是说,控件的显示看起来不错。
Step#0 screenshot:
Step#1 screenshot:
在 server.R 方面,我使用如下代码创建单选按钮。
output$radioChoices <- reactive({
...
inputGroup <- renderUI({
input_list <- tagList(
radioButtons(inputId = "choiceGrp", label = "Available Grouping Columns", choices = grpColumnNames, inline = TRUE, selected = selectedGrp),
radioButtons(inputId = "choiceNumb",label = "Available Numerical Columns",choices = numColumnNames, inline = TRUE, selected = selectedNum),
radioButtons(inputId = "choiceDate",label = "Available Date Columns", choices = dateColumnNames, inline = TRUE, selected = selectedDate),
hr()
)
do.call(tagList, input_list)
})
print(inputGroup)
output$radioChoices <- inputGroup
})
我试过使用提交按钮和操作按钮来尝试强制执行事件,但没有骰子。我的头骨风暴现在会转到诸如“我需要以某种方式在这里使用 Javascript 吗?”
之类的地方
非常感谢所有在这件事上借给我周期的人。
我不确定我是否理解你的问题。这是一个 MWE,它访问由 uiOutput
/renderUI
创建的小部件的值。 uiOutput
/renderUI
创建的小部件的值可以像访问任何其他小部件的值一样访问。
如果这不能满足您的需求,请提供更多详细信息。
library(shiny)
ui <-
fluidPage(
uiOutput("dataInput"),
textOutput("result")
)
server <- function(input, output, session) {
output$dataInput <- renderUI({
selectInput("beatles", "Who's your favourite Beatle?", choices=c("- Select one -"="", "John", "Paul", "George", "Ringo"))
})
output$result <- renderText({
req(input$beatles)
paste0("You chose ", input$beatles)
})
}
shinyApp(ui, server)
问题 在 R Shiny 中,当使用
- 渲染UI
- ui输出
动态生成控件集,例如:
- 复选框
- 单选按钮
- 文本框
如何通过引发事件来获取这些值或填充输入?
按原样,那些生成的控件似乎是“仅显示”。创建一个 selection、标记一个复选框或输入数据只会更新显示,但不会创建任何事件,并且不会将值填充到“输入”变量 ( ReactiveValues ) 中;因此,闪亮的服务器进程没有收到任何东西。
如果这些控制输入实际上是隔离的,则完全破坏了动态创建控件的意义。
显然,我希望这个问题已经得到解决,但我的搜索没有找到它。
在我的具体案例中,UI 允许用户:
- Select 并上传 CSV 文件。
- 该逻辑识别数值列、日期列和分组列,并生成 3 组单选按钮控件集。这个想法是您选择您感兴趣的列。
- 选择一个分组列应该return columnID 返回到服务器,在那里它会显示一个离散的组列表,select。这失败了,因为 select 离子不会生成事件,并且输入变量(提供给 server.R)仅包含来自静态控件的 ReactiveValues。
也就是说,控件的显示看起来不错。
Step#0 screenshot:
Step#1 screenshot:
在 server.R 方面,我使用如下代码创建单选按钮。
output$radioChoices <- reactive({
...
inputGroup <- renderUI({
input_list <- tagList(
radioButtons(inputId = "choiceGrp", label = "Available Grouping Columns", choices = grpColumnNames, inline = TRUE, selected = selectedGrp),
radioButtons(inputId = "choiceNumb",label = "Available Numerical Columns",choices = numColumnNames, inline = TRUE, selected = selectedNum),
radioButtons(inputId = "choiceDate",label = "Available Date Columns", choices = dateColumnNames, inline = TRUE, selected = selectedDate),
hr()
)
do.call(tagList, input_list)
})
print(inputGroup)
output$radioChoices <- inputGroup
})
我试过使用提交按钮和操作按钮来尝试强制执行事件,但没有骰子。我的头骨风暴现在会转到诸如“我需要以某种方式在这里使用 Javascript 吗?”
之类的地方非常感谢所有在这件事上借给我周期的人。
我不确定我是否理解你的问题。这是一个 MWE,它访问由 uiOutput
/renderUI
创建的小部件的值。 uiOutput
/renderUI
创建的小部件的值可以像访问任何其他小部件的值一样访问。
如果这不能满足您的需求,请提供更多详细信息。
library(shiny)
ui <-
fluidPage(
uiOutput("dataInput"),
textOutput("result")
)
server <- function(input, output, session) {
output$dataInput <- renderUI({
selectInput("beatles", "Who's your favourite Beatle?", choices=c("- Select one -"="", "John", "Paul", "George", "Ringo"))
})
output$result <- renderText({
req(input$beatles)
paste0("You chose ", input$beatles)
})
}
shinyApp(ui, server)