selectInput 不返回 ALL 并将因子转换为闪亮的数字

问题描述 投票:0回答:1

在Shiny中,我希望在使用

All
时能够选择
selectInput

但是,在下面的shiny应用程序中,当我使用

selectInput
作为列
Species
并为
All
指定选项
choices
时,shiny将列转换为数字(而不是因子)。

library(shiny)
library(palmerpenguins)

# Load the palmerpenguins dataset
data("penguins")

# Define UI
ui <- fluidPage(
  titlePanel("Penguin Species Selector"),
  
  sidebarLayout(
    sidebarPanel(
      selectInput("species", "Select Species:",
                  choices = c("All", unique(penguins$species))),
      hr(),
      helpText("Select a species to view its data.")
    ),
    
    mainPanel(
      tableOutput("penguin_table")
    )
  )
)

# Define server logic
server <- function(input, output) {
  output$penguin_table <- renderTable({
    if (input$species == "All") {
      return(penguins)
    } else {
      return(subset(penguins, species == input$species))
    }
  })
}

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

当我删除

All
并使用这个
choices = unique(penguins$species)
(见下文)时,闪亮的应用程序会将列显示为一个因素,但现在我无法选择
All

library(shiny)
library(palmerpenguins)

# Load the palmerpenguins dataset
data("penguins")

# Define UI
ui <- fluidPage(
  titlePanel("Penguin Species Selector"),
  
  sidebarLayout(
    sidebarPanel(
      selectInput("species", "Select Species:",
                  choices = unique(penguins$species)),
      hr(),
      helpText("Select a species to view its data.")
    ),
    
    mainPanel(
      tableOutput("penguin_table")
    )
  )
)


# Define server logic
server <- function(input, output) {
  output$penguin_table <- renderTable({
    if (input$species == "All") {
      return(penguins)
    } else {
      return(subset(penguins, species == input$species))
    }
  })
}

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

r shiny selectinput
1个回答
0
投票

这是因为

factor
在内部存储为数字。一个简单的解决方法是将物种转变为角色。

choices = c("All", unique(as.character(penguins$species)))

完整代码-

library(shiny)
library(palmerpenguins)

# Load the palmerpenguins dataset
data("penguins")

# Define UI
ui <- fluidPage(
  titlePanel("Penguin Species Selector"),
  
  sidebarLayout(
    sidebarPanel(
      selectInput("species", "Select Species:",
                  choices = c("All", unique(as.character(penguins$species)))),
      hr(),
      helpText("Select a species to view its data.")
    ),
    
    mainPanel(
      tableOutput("penguin_table")
    )
  )
)

# Define server logic
server <- function(input, output) {
  output$penguin_table <- renderTable({
    if (input$species == "All") {
      return(penguins)
    } else {
      return(subset(penguins, species == input$species))
    }
  })
}

# Run the application
shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.