【发布时间】:2020-11-11 12:46:16
【问题描述】:
注意:下面的第一个示例不是特别清楚 - 我在下面添加了另一个示例,它更清楚地解释了所需的行为。
我正在构建的应用程序遇到了一个稍微棘手的问题。我正在使用uiOutput 动态渲染一系列radioButtons。但是,我需要在创建它们之前为输入分配值。我认识到这可能没有意义,但在我的实际用例中,我认为没有其他方法。
在下面的示例中,我想创建三个输入,input$mpg、input$hp 和 input$disp,并为它们分别分配一个值 yes在生成 UI 之前。然后,当生成 UI 时,我想用所选值替换这些默认值。请注意,在下面的示例中,我包含了一个 actionButton 以防止这些输入立即被 UI 创建。
任何人都可以提出一种方法来实现这一点吗?
library(shiny)
var_names <- c("mpg", "hp", "disp")
ui <- fluidPage(
actionButton("go", "Go!"),
uiOutput("var_type")
)
server <- function(input, output, session) {
observeEvent(input$go, {
output$var_type <- renderUI({
var_names %>% map(~radioButtons(inputId = .x,
label = .x,
choices = c("Yes", "No")))
})
})
}
shinyApp(ui, server)
编辑:提高清晰度的新示例
我正在使用uiOutput 动态渲染三个radioButtons。这些单选按钮的值将连接成一个字符串并呈现在textOutput“值”中。但是,这三个单选按钮及其关联输入仅在单击操作按钮Go! 后生成。
在单击 actionButton 并呈现单选按钮及其相关输入之前,我仍然希望使用这些输入的一组默认值来呈现 textOutput。我想为三个输入中的每一个分配默认值yes。这是我的问题的根本原因,因为我想在点击Go! 按钮之后实际输入之前创建一个占位符输入并为其分配一个值。
在单击 Go! 之前,我希望 textOutput values 显示“Yes Yes Yes”,因为这些是前面提到的默认值。但是,在单击Go! 并呈现单选按钮后,textOutput“值”应该响应这些变化的输入。例如,如果单击 Go 后,mpg 的按钮更改为“否”,则文本将显示为 No Yes Yes。
library(shiny)
var_names <- c("mpg", "hp", "disp")
ui <- fluidPage(
actionButton("go", "Go!"),
uiOutput("var_type"),
textOutput("values")
)
server <- function(input, output, session) {
observeEvent(input$go, {
output$var_type <- renderUI({
var_names %>% map(~radioButtons(inputId = .x,
label = .x,
choices = c("Yes", "No")))
})
})
output$values <- renderText({
paste(input$mpg, input$hp, input$disp)
})
}
shinyApp(ui, server)
【问题讨论】:
-
那你为什么不直接把它们放到
fluidPage()中呢?我真的不明白您要在这里创建什么行为。 -
在实际用例中,变量选择依赖于上传的表,所以我无法在ui中提前定义它们,因为直到用户上传我才知道它们是什么某事
-
另外,在渲染单选按钮之前,我需要在服务器端的其他操作中使用默认值
-
对不起,这对我来说仍然没有意义。您希望从可重现的示例中获得什么行为?我需要测试什么才能验证它是否按您喜欢的方式工作?
-
如果第一个示例不清楚并且没有清楚地解释您的问题,为什么不完全删除它并只保留帖子中的编辑部分。