【问题标题】:Access dynamic id in shiny R在闪亮的 R 中访问动态 ID
【发布时间】:2020-02-12 09:48:53
【问题描述】:

所以这是我之前问题的扩展。

Dynamic repeating conditionalPanel in R shiny dashboard

这是我现在正在使用的闪亮代码。

library(shiny)
library(shinydashboard)

ui <- fluidPage(
  br(),
  selectInput("inpt", "Input Number", seq(1,50), selectize = FALSE),
  br(),
  uiOutput("selectors")
)

server <- function(input, output, session){

  output[["selectors"]] <- renderUI({
    n <- input[["inpt"]]
    selectors <- lapply(1:n, function(i){
      selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1)
    })
    do.call(function(...){
      box(..., width = 2, status = "primary")
    }, selectors)
  })

}

shinyApp(ui, server)

它将根据'inpt'数字选择生成选择窗口。

现在我的问题是我想访问生成的选择输入的值。

示例:如果我选择了 3,则会生成三个输入,分别为 id1、id2、id3。

如何访问这些 ID?如果我想打印它们,我该怎么做?

for (j in 1:inpt){ 
    print(eval(parse(text = paste0("input$", paste0("id",j)))))
}

但输出是:

NULL
NULL
NULL

我认为我的 eval 和 parse 方法是错误的,所以我只尝试了 inpt

for (j in 1:inpt){ 
    print(eval(parse(text = paste0("input$", paste0("in","pt")))))
}

输出是(在选择输入中选择了 3)

3
3
3

所以我猜我的 eval, parse 方法是正确的。 那么如何访问上例中的 id1, id2, ..., idn 呢?

【问题讨论】:

标签: r dynamic shiny shinydashboard


【解决方案1】:

请检查以下内容:

library(shiny)
library(shinydashboard)

ui <- fluidPage(
  br(),
  selectInput("inpt", "Input Number", seq(1,50), selectize = FALSE),
  br(),
  uiOutput("selectors"),
  uiOutput("printMyDynamicInputs"),
  uiOutput("printMyFirstDynamicInput")
)

server <- function(input, output, session){

  output[["selectors"]] <- renderUI({
    n <- input[["inpt"]]
    selectors <- lapply(1:n, function(i){
      selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1)
    })
    do.call(function(...){
      box(..., width = 2, status = "primary")
    }, selectors)
  })

  myDynamicInputs <- reactive({
    lapply(1:input$inpt, function(i){
      input[[paste0("id",i)]]
    })
  })

  output$printMyDynamicInput <- renderUI({
    paste("You selected:", paste(myDynamicInputs(), collapse = ", "))
  })

  output$printMyFirstDynamicInputs <- renderUI({
    paste("You selected:", input$id1)
  })

}

shinyApp(ui, server)

【讨论】:

  • 写答案的好方法。谢谢。但是,我想单独访问所有 ID。我该怎么做?
  • 就像任何其他输入一样,例如input[["id1"]]input$id1,刚刚更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2016-08-12
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多