возможно ли иметь SelectInput, у которого нет стрелки раскрывающегося списка? - PullRequest
0 голосов
/ 03 апреля 2020

плохо знакомы с использованием Rshiny. Мой вопрос в основном касается внешнего вида выпадающих баров. Есть 2 кадра данных, один имеет данные автомобиля, а другой показывает расстояния. И выпадающие панели зависят от того, что было выбрано до этого.

Мне было интересно, смогу ли я сделать так, чтобы выбранные входы «стоимость» и «расстояние в милях» выглядели просто как обычное поле без стрелки выпадающего меню?

Извините, если на этот вопрос уже был дан ответ, возможно, мои навыки поиска в Google еще не самые лучшие для кодирования! Посмотрев вокруг, я вижу, что использование множественного = ИСТИНА избавляет от этой стрелки, но это означает, что человек должен выбрать ее, а я не хочу, она должна просто автоматически появиться после того, как они выбрали предыдущие поля.

Вторая мысль заключалась в том, чтобы вместо этого использовать какой-то текстовый вывод, но я думаю, что тогда я потеряю хорошее форматирование поля и подзаголовка, и теперь у меня нет идей. И я не уверен, как бы я связал это, если это не selectinput .... Так у кого-нибудь есть предложение для этой проблемы?

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

Мой код:

library(shiny)

Df <- data.frame(Manufacturer= c(rep("ford", 4)), 
                                    Model= c(rep("esport",2), rep("fiesta",2)), 
                    transmission= c(1,2,3,4), cost=c(2,4,6,8))

Distance1 <- data.frame(Origin= c("leeds", "London", "Glasgow"), 
                        Destination = c("Bristol", "Cardiff", "London"),
                        Distance= c(12,13,14))

ui <- fluidPage(
  fluidRow(
    column(4, wellPanel(
      selectInput("Select1", "Choose your Manufacturer", sort(Df$Manufacturer),
                  unique(Df$Manufacturer)),
      selectizeInput("Select2", "Choose your Model", sort(Df$Model), 
                     options= list(
                       placeholder = '',
                       onInitialize = I('function() { this.setValue(""); }'))),
      selectizeInput("Select3", "Choose transmission", sort(Df$transmission),
                     options= list(
                       placeholder = '',
                       onInitialize = I('function() { this.setValue(""); }'))),
      selectInput("Select4", "cost", choices= NULL),
      selectizeInput("Select5", "Choose Origin", sort(Distance1$Origin),
                     options= list(
                       placeholder = '',
                       onInitialize = I('function() { this.setValue(""); }'))),
      selectizeInput("Select6", "Choose Destination", sort(Distance1$Distance),
                     options= list(
                       placeholder = '',
                       onInitialize = I('function() { this.setValue(""); }'))),
      selectInput("Select7", "Distance in Miles", choices= NULL),
      textOutput("total1")

    ))))

server <- function(input, output,session) {
  observeEvent(input$Select1,{
    updateSelectInput(session,'Select2',
                      choices=unique(Df$Model[Df$Manufacturer==input$Select1]))
  }) 

  observeEvent(input$Select2,{
    updateSelectInput(session,'Select3',
                      choices=unique(Df$transmission[Df$Manufacturer==input$Select1 & 
                                                         Df$Model==input$Select2]))
  }) 

  observeEvent(input$Select3,{
    updateSelectInput(session,'Select4',
                      choices=unique(Df$cost[Df$Manufacturer==input$Select1 & 
                                                       Df$Model==input$Select2 & 
                                                       Df$transmission==input$Select3]))

  }) 

observeEvent(input$Select5,{
  updateSelectInput(session,'Select6',
                    choices=unique(Distance1$Destination[Distance1$Origin==input$Select5]))
})

  observeEvent(input$Select6,{
    updateSelectInput(session,'Select7',
                      choices=unique(Distance1$Distance[Distance1$Origin==input$Select5 & 
                                                          Distance1$Destination==input$Select6]))
  })

output$total1 <- renderText({as.numeric(input$Select4) * as.numeric(input$Select7)}) 
    }


shinyApp( ui= ui, server= server)

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете сделать это с помощью CSS. Я использовал ответ здесь в качестве основы. Аргумент content касается стрелки (кстати, ответ, с которым я столкнулся, также показывает, как изменить стиль стрелки). Кроме того, поскольку вы не хотите применять это изменение ко всем selectizeInput s, вам необходимо заключить selectizeInput s в tags$div и указать #div_id в части HTML:

library(shiny)

ui <- fluidPage(
  tags$head(
    tags$style(
      HTML(
"        #div_id .selectize-control.single .selectize-input:after{
          content: none;
        }"
      )
    )
  ),
  tags$div(id = "div_id", 
           selectizeInput("foo", "foo", names(mtcars))),  
  selectizeInput("foo_2", "foo 2", names(mtcars)),
  tags$div(id = "div_id", 
           selectizeInput("foo_3", "foo_3", names(iris)))
)

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

}

shinyApp(ui, server)
...