Использование условной панели в блестящем, где вход является вектором - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть несколько входов, которые я хотел бы иметь для фильтрации источника данных.Тем не менее, у меня есть 100 входных данных для рендеринга, но я ожидаю, что в любой момент времени будет использоваться только небольшое количество.

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

Проблема, с которой я столкнулся, состоит в том, что в аргументе условия внутри условной панели я не могу показатьсяОператор% in%, он не выдает ошибку - он просто не работает.

Я сделал легкий пример ниже:

# libs ----
library(shiny)
library(shinydashboard)

# header ----
header <- dashboardHeader(title = "Example")

#sidebar ----
sidebar <- dashboardSidebar(disable = T)

#body ----
body <- dashboardBody(

  fluidRow(
    column(
      width = 12,
      selectInput(
        inputId = "control", 
        label = "choose something:",
        choices = c("a", 
                    "b", 
                    "c", 
                    "d", 
                    "e"),
        multiple = TRUE
      )
    )
  ),

  conditionalPanel(
    condition = "'a' %in% input.control",
    textInput(inputId = "bla", label = "aaaaa")
  ),

  conditionalPanel(
    condition = "'b' %in% input.control",
    textInput(inputId = "ble", label = "bbbbb")
  )

)

# all ui ----
ui <- dashboardPage(
  header = header, 
  sidebar = sidebar, 
  body = body
)

# server ----
server = shinyServer(function(input, output) {


})


# Run the application 
shinyApp(ui = ui, server = server)

Я не былсмог найти способ решения этой проблемы, благодарю за любую помощь!

спасибо

РЕДАКТИРОВАТЬ - решено условие является выражением JS (спасибо @edavidaja заоб этом), и когда я попытался использовать: condition = 'input.control.includes("a")', это не удалось.так что я нашел решение с моим коллегой из JS dev и получил решение с ... condition = 'input.control && input.control.indexOf("a") > -1'

1 Ответ

0 голосов
/ 10 декабря 2018

Из справки:

condition   
A JavaScript expression that will be evaluated repeatedly to determine whether the 
panel should be displayed.

%in является выражением R, а не JavaScript, поэтому что-то вроде включает , вероятно, то, что вам нужно.

Кроме того, если у вас есть сотни объектов для рендеринга, которые вам могут не понадобиться, рассмотрите возможность использования renderUI()/uiOutput().

...