Доступ к Dynami c ID в блестящей R - PullRequest
0 голосов
/ 12 февраля 2020

Так что это расширение моего предыдущего вопроса.

Dynami c повторение условной панели в R блестящей панели инструментов

Вот блестящий код, который я использую справа сейчас.

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)

Будет сгенерировано выделение windows в зависимости от выбора номера 'inpt'.

Теперь моя проблема в том, что я хочу получить доступ к значению сгенерированного ввода выбора.

Пример: если я выбрал 3, будут генерироваться три входа с id1, id2, id3.

Как получить доступ к этим идентификаторам? Если я хочу напечатать их, как я могу?

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 в приведенном выше примере?

1 Ответ

1 голос
/ 12 февраля 2020

Пожалуйста, проверьте следующее:

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)

Result

...