我已经创建了可重现的代码来强调我所遇到的问题。我知道要改变 wellPanel()
,我用 wellPanel(...,style = "background: green")
比如说,我想把这个文件的背景颜色改变一下。
然而,我想改变以下的背景颜色 wellPanel()
根据所选公司的情况(selectInput()
)从我的数据框架中的公司选项中提取。所以,我将 wellPanel(...,style=textOutput("colour_panel"))
中,然后定义 output$colour_panel
在服务器中,其值取决于所选择的公司。
为什么背景颜色不会改变?
library(shiny)
library(dplyr)
name <- c("Company1","Company2","Company3")
price <- c("400","200","150")
my_data <- data.frame(name,price)
ui <- fluidPage(
h1("Shiny Template"),
sidebarLayout(
sidebarPanel(
selectInput("company", "Choose a Company:", choices = c(Choose="",levels(as.factor(my_data$name))))
),
mainPanel(
fluidRow(
column(4,
wellPanel(
textOutput("price"),
style=textOutput("colour_panel")
))
)
)
)
)
server <- function(input, output) {
filtered_data <- reactive ({
data <- my_data %>%
filter(name==input$company)
data
})
output$colour_panel <- renderText({
ifelse(input$company=='',
paste0("background: grey"),
ifelse(
input$company=="Company1" | input$company=="Company2",
paste0("background: green"),
paste0("background: red")))
})
output$price <- renderText({
if(input$company==""){
return()
}
else(
filtered_data() %>%
select(price) %>%
as.integer()
)
})
}
shinyApp(ui, server)
类似这样的东西可以解决你的问题
library(shiny)
library(dplyr)
name <- c("Company1","Company2","Company3")
price <- c("400","200","150")
my_data <- data.frame(name,price)
ui <- fluidPage(
h1("Shiny Template"),
sidebarLayout(
sidebarPanel(
selectInput("company", "Choose a Company:", choices = c(Choose="",levels(as.factor(my_data$name))))
),
mainPanel(
fluidRow(
column(4,uiOutput("well_panel_server"))
)
)
)
)
server <- function(input, output) {
filtered_data <- reactive ({
data <- my_data %>%
filter(name %in% input$company)
data
})
color_panel <- reactive(ifelse(input$company=='',
paste0("background: grey"),
ifelse(
input$company=="Company1" | input$company=="Company2",
paste0("background: green"),
paste0("background: red"))))
output$price <- renderText({
if(input$company==""){
"Select Company"
}
else(
filtered_data() %>%
pull(price) %>%
as.character()
)
})
output$well_panel_server <- renderUI({
wellPanel(textOutput("price"),style = color_panel())
})
}
shinyApp(ui, server)