I would like Shiny to print out some different color text depending on the size of a vector. I was thinking something like:
output$some_text <- renderText({
if(length(some_vec) < 20){
paste("This is red text")
<somehow make it red>
}else{
paste("This is blue text")
<somehow make it blue>
...but then I realized, I'm doing this in the server, not the UI.
And, as far as I know, I can't move this conditional logic into the UI.
For example, something like this won't work in the UI:
if(length(some_vec)< 20){
column(6, tags$div(
HTML(paste("This text is ", tags$span(style="color:red", "red"), sep = ""))
)}
else{
tags$div(HTML(paste("This text is ", tags$span(style="color:blue", "blue"), sep = ""))
)}
Does anyone have any creative ideas?
Inspired by jenesaisquoi's answer I tried the following and it worked for me. It is reactive and requires no additional packages. In particular look at output$text3
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Reactive"),
sidebarLayout(
sidebarPanel(
helpText("Variables!"),
selectInput("var",
label = "Choose Variable",
choices = c("red", "blue",
"green", "black"),
selected = "Rojo"),
sliderInput("range",
label = "Range:",
min = 0, max = 100, value = c(0, 100))
),
mainPanel(
textOutput("text1"),
textOutput("text2"),
htmlOutput("text3"),
textOutput("text4")
)
)
))
server <- function(input, output) {
output$text1 <- renderText({
paste("You have selected variable:", input$var)
})
output$text2 <- renderText({
paste("You have selected range:", paste(input$range, collapse = "-"))
})
output$text3 <- renderText({
paste('<span style=\"color:', input$var,
'\">This is "', input$var,
'" written ', input$range[2],
' - ', input$range[1],
' = ', input$range[2] - input$range[1],
' times</span>', sep = "")
})
output$text4 <- renderText({
rep(input$var, input$range[2] - input$range[1])
})
}
# Run the application
shinyApp(ui = ui, server = server)