在无功输出内使用setSliderColor更改滑块颜色
我正在构建一个闪亮的应用程序,它有一个反应式滑块,我希望条的颜色是红色。我试图使用shinyWidgets包中的setSliderColor()函数,但它不起作用。我的假设是它不会在幻灯片上出现,因为它不是:在无功输出内使用setSliderColor更改滑块颜色,r,shiny,reactive-programming,reactive,shinywidgets,R,Shiny,Reactive Programming,Reactive,Shinywidgets,我正在构建一个闪亮的应用程序,它有一个反应式滑块,我希望条的颜色是红色。我试图使用shinyWidgets包中的setSliderColor()函数,但它不起作用。我的假设是它不会在幻灯片上出现,因为它不是: library(shiny) library(shinyWidgets) ui <- fluidPage( setSliderColor(c("green"), sliderId = c(1)), sidebarLa
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
setSliderColor(c("green"), sliderId = c(1)),
sidebarLayout(
sidebarPanel(
textInput(inputId = "greeting",
label = "Say hi!"),
actionButton(inputId = "submit",
label = "Submit"),
uiOutput("num_slider"),
),
mainPanel()
))
server <- function(input, output) {
output$num_slider <- renderUI({
shiny::req(input$greeting)
shiny::req(input$submit)
if(input$greeting == "hi!") {
sliderInput(inputId = "num_filter2",
label = "Filter by Number",
min = 1,
max = 10,
value = c(1, 10))
} else {
sliderInput(inputId = "num_filter2",
label = "Filter by Number",
min = 1,
max = 5,
value = c(1, 5))
}
})
}
# Run the application
shinyApp(ui = ui, server = server)
图书馆(闪亮)
图书馆(shinyWidgets)
ui该函数不是设计用于renderUI()
。每次调用都需要更新参数
快速修复方法是预先分配用户永远无法达到的非常大的向量(比如100万个),或者像这样使用reactiveValues()
:
注意:当“hi!”作为输入传递时,滑块将变为绿色
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput(inputId = "greeting",
label = "Say hi!"),
actionButton(inputId = "submit",
label = "Submit"),
uiOutput("num_slider"),
sliderInput(inputId = "num_filter1",
label = "Now it works!",
min = 1,
max = 10,
value = c(1, 10))
),
mainPanel()
))
server <- function(input, output) {
i <- reactiveValues()
i$color <- 1
i$color_name <- 'green'
observeEvent(input$submit, {
i$color <- c(i$color, i$color[[length(i$color)]] + 1)
i$color_name <- c(i$color_name, 'green')
#left for demonstration purposes
print(i$color)
print(i$color_name)
shiny::req(input$greeting)
shiny::req(input$submit)
output$num_slider <- renderUI({
if(input$greeting == "hi!") {
fluidPage(setSliderColor(i$color_name, sliderId = i$color),
sliderInput(inputId = "num_filter2",
label = "Filter by Number",
min = 1,
max = 10,
value = c(1, 10)))}
}) })
}
# Run the application
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)
谢谢你让我走上正轨!在您的基础上构建的一个更简单的解决方案是简单地包装fluidPage(setSliderColor()通过始终将SliderId设置为1,围绕服务器中每个滑块输入的参数。然后,您可以轻松地单独自定义每个滑块的颜色,而无需i$color长度等。此解决方案的一个限制是:我只能使用一个滑块。在我使用两个滑块的代码中,它只编辑其中一个滑块,而保留另一个滑块如果您对为什么它只适用于一个sliderinput有任何想法,我将提出一个新问题,即如何将此解决方案扩展到多个sliderinput:
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput(inputId = "greeting",
label = "Say hi!"),
actionButton(inputId = "submit",
label = "Submit"),
uiOutput("num_slider"),
sliderInput(inputId = "num_filter1",
label = "Now it works!",
min = 1,
max = 10,
value = c(1, 10))
),
mainPanel()
))
server <- function(input, output) {
i <- reactiveValues()
i$color <- 1
i$color_name <- 'green'
observeEvent(input$submit, {
i$color <- c(i$color, i$color[[length(i$color)]] + 1)
i$color_name <- c(i$color_name, 'green')
#left for demonstration purposes
print(i$color)
print(i$color_name)
shiny::req(input$greeting)
shiny::req(input$submit)
output$num_slider <- renderUI({
if(input$greeting == "hi!") {
fluidPage(setSliderColor(i$color_name, sliderId = i$color),
sliderInput(inputId = "num_filter2",
label = "Filter by Number",
min = 1,
max = 10,
value = c(1, 10)))}
}) })
}
# Run the application
shinyApp(ui = ui, server = server)