Применение логики conditionalPanel, когда для одного switchInput задано значение TRUE, а ползунок имеет разные входы - PullRequest
0 голосов
/ 31 октября 2018

Я реализую приложение R Shiny, и мои навыки работы с Javascript не слишком сильны.

Я изо всех сил пытаюсь придумать условную логику в conditionalPanel(). Как отобразить id3, только если для id1 установлено значение ИСТИНА, а диапазон ползунка id2 имеет различные значения?

library(shiny)
library(shinyWidgets)

ui <- fluidPage(
  materialSwitch(inputId = "id1", label = "Do I want this on?", value = FALSE, status = "primary"),
  sliderTextInput(inputId = "id2", label = "Show below if the range is greater than 0", choices = 2000:2018, selected = rep(2018, 2)),
  br(), br(),
  conditionalPanel("input.id1 && input.id2[1] != input.id2[2]",
               materialSwitch(inputId = "id3", label = "To show based on conditions above.", value = FALSE, status = "primary")
  )
)

server <- function(input, output) {}

shinyApp(ui = ui, server = server)

Я также играл с пакетом shinyjs, но также не добился успеха (попытка ниже):

library(shiny)
library(shinyWidgets)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  materialSwitch(inputId = "id1", label = "Do I want this on?", value = FALSE, status = "primary"),
  sliderTextInput(inputId = "id2", label = "Show below if the range is greater than 0", choices = 2000:2018, selected = rep(2018, 2)),
  br(), br(),
  hidden(
    p(id = "element", materialSwitch(inputId = "id3", label = "To show based on conditions above.", value = FALSE, status = "primary"))
  )
)

server <- function(input, output) {
  observe({
    if (input$id1 == TRUE && (input$id2[1] != input$id2[2])) {
      show("element")
    }
  })  
}

shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 31 октября 2018

Я забыл, что Javascript использует индекс с нулевым основанием, в отличие от R.

library(shiny)
library(shinyWidgets)

ui <- fluidPage(
  materialSwitch(inputId = "id1", label = "Do I want this on?", value = FALSE, status = "primary"),
  sliderTextInput(inputId = "id2", label = "Show below if the range is greater than 0", choices = 2000:2018, selected = rep(2018, 2)),
  br(), br(),
  conditionalPanel("input.id1 && input.id2[0] != input.id2[1]",
           materialSwitch(inputId = "id3", label = "To show based on conditions above.", value = FALSE, status = "primary")
  )
)

server <- function(input, output) {}

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