Как я могу использовать str_detect внутри условной панели в Shiny? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть блестящее приложение, в котором я хочу, чтобы условная панель появлялась каждый раз, когда пользователь выбирает строку, содержащую определенное слово, но не точное слово, в предыдущем selectInput. Вот что у меня сейчас есть:

library(shiny)
library(tidyverse)

ui <- fluidPage(
  sidebarPanel(
    selectInput("input1",
                "Select a word:",
                 choices = c("Word1 something",
                             "Word2 something",
                             "Word3 something",
                             "Word4 something",
                             "Word1 nothing")
               )
              )
             )

server <- function(input, output){}

shinyApp(ui, server)

Если бы я мог использовать простой R-код внутри условной панели, он бы выглядел так:

ui <- fluidPage(
  sidebarPanel(
    selectInput("input1",
                "Select a word:",
                 choices = c("Word1 something",
                             "Word2 something",
                             "Word3 something",
                             "Word4 something",
                             "Word1 nothing")),
    conditionalPanel(
      condition = str_detect(input1, "Word1"),
      selectInput("input2", 
                  "Select another word:",
                  choices = c("Word10",
                              "Word11")))
              )
             )

server <- function(input, output){}

shinyApp(ui, server)

Однако для conditionalPanel в качестве условия требуется код javascript. Если бы я хотел точное слово, я бы использовал "input.input1 == 'Word1 nothing'", но это не то, что я ищу. Кто-нибудь знает, как я могу это сделать?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы можете использовать indexOf() метод javascript, который возвращает позицию первого вхождения указанного значения в строке. Возвращает -1, если значение для поиска никогда не встречается.

library(shiny)

ui <- fluidPage(
  sidebarPanel(
    selectInput("input1",
                "Select a word:",
                choices = c("Word1 something",
                            "Word2 something",
                            "Word3 something",
                            "Word4 something",
                            "Word1 nothing")),
    conditionalPanel("input.input1.indexOf('Word1') > -1",
                     selectInput("input2", 
                                 "Select another word:",
                                 choices = c("Word10",
                                             "Word11"))
    )
  )
)

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

shinyApp(ui, server)
0 голосов
/ 30 октября 2018

В продолжение моего комментария, есть альтернативный способ -

library(shiny)
library(stringr)

ui <- fluidPage(
  sidebarPanel(
    selectInput("input1",
                "Select a word:",
                 choices = c("Word1 something",
                             "Word2 something",
                             "Word3 something",
                             "Word4 something",
                             "Word1 nothing")),
    uiOutput("cond_input")
              )
             )

server <- function(input, output, session) ({
  output$cond_input <- renderUI({
      req(str_detect(input$input1, "Word1"))
      selectInput("input2", 
                  "Select another word:",
                  choices = c("Word10",
                              "Word11"))
  })
})

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