Доступ к идентификатору входа реактивных радио-кнопок в блестящем приложении - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь создать блестящее приложение, которое включает radioButtons, которые реагируют на некоторые пользовательские вводы.

Мне удалось реализовать код из этого связанного вопроса: Добавить n реагирующих radioButtons в блестящее приложение в зависимости от ввода пользователя

Однако в этом вопросе не описано, как получить доступ к этим значениям.

Вот пример:

сервер. R

library(shiny)

shinyServer( function(input, output, session) {

  output$variables <- renderUI({
    numVar <- length(as.integer(input$in0))

    lapply(input$in0, function(x) {
    list(radioButtons(paste0("dynamic",x), x, 
                     choices = c("Choice one" = "one", 
                                 "Choice two" = "two"), selected = "one"))
    })
  })
})  

ui.R

library(shiny)

shinyUI(pageWithSidebar (

  headerPanel("mtcars subset"),

  sidebarPanel(
    selectInput(inputId = 'in0', label = 'Choose variables', 
                choices = colnames(mtcars), 
                multiple = TRUE, selectize = TRUE),
    uiOutput("variables")
  ),
  mainPanel()
)) 

Что я пробовал до сих пор:

 numVar <- length(as.integer(input$in0))

for(i in 1:numVar){

in <- noquote(paste0("dynamic",input$in0[i])) 
input$in

}

Однако это не работает. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Добро пожаловать в stackoverflow!

Вы были почти там. Однако вам необходимо убедиться, что вы обращаетесь к входам в реактивном контексте.

Вот рабочий пример:

library(shiny)

ui <- fluidPage(
  pageWithSidebar (
    headerPanel("mtcars subset"),
    sidebarPanel(
      selectInput(inputId = 'in0', label = 'Choose variables', 
                  choices = colnames(mtcars), 
                  multiple = TRUE, selectize = TRUE),
      uiOutput("variables")
    ),
    mainPanel(
      textOutput("myChoicesDisplay")
    )
  )
)

server <- function(input, output, session) {
  output$variables <- renderUI({
    lapply(input$in0, function(x) {
      list(radioButtons(paste0("dynamic", x), x, 
                        choices = c("Choice one" = "one", 
                                    "Choice two" = "two"), selected = "one"))
    })

  })

  myChoices <- reactive({
    dynInputList <- list()
    for(dynInputs in paste0("dynamic", input$in0)){
      dynInputList[[dynInputs]] <- input[[dynInputs]]
    }
    return(dynInputList)
  })

  output$myChoicesDisplay <- renderText({
    paste(input$in0, myChoices(), sep = ": ", collapse = ", ")
  })

}

shinyApp(ui, server)

Result

0 голосов
/ 24 января 2020

Я не уверен точно в вашем случае использования, но чтобы получить доступ к значениям, вы можете отредактировать свой код, как показано ниже:

numVar <- length(as.integer(input$in0))

for(i in 1:numVar){

value <- paste0("dynamic",input$in0[i])
input[[value]]

}

В основном вам нужно использовать input[[value]] вместо input$value в этот случай. Похоже, что R не позволяет вам использовать in в качестве переменной (вероятно, потому что она уже используется в других контекстах). Вам больше не нужно noquote().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...