我使用的是闪亮的,但利用了自己的自定义CSS和html。我遇到了一个问题,我无法将值从服务器传递到UI并将其放在div标签内。
我的目标是:
######all my code#####
<div style="color:{{textOutput("my_variable")}}"
####rest of code####
无论出于何种原因,闪亮都不会干净地传递值,因此我的应用无法正确加载。
这是完整的代码
library(shiny)
test_date <- as.Date(c('2019-01-01','2019-01-02','2019-01-03','2019-01-04'))
score <- c(75,80,85,90)
my_dataframe <- data.frame(test_date, score)
getColor <- function(x) {
if (x > 80) {
result <- "green"
}
else if (x > 50) {
result <- "yellow"
}
else {
result <- "red"
}
return(result)
}
ui <- htmlTemplate(
text_ = '
<html>
<head>
{{headContent()}}
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="application/shiny-singletons"></script>
<script type="application/html- dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.2.0]</script>
</head>
<body>
<div style="color:{{textOutput("score_color")}}">{{textOutput("score_value")}}</div>
</body>
</html>'
)
server <- function(input, output, session) {
output$score_value <- renderText(
{mean(my_dataframe$score)}
)
output$score_color <- renderText(
{getColor(mean(my_dataframe$score))}
)
}
shinyApp(ui, server)
因此,如果此方法正常,我将看到红色文本显示82.5的答案。
答案 0 :(得分:2)
我认为Shiny并不是要输出纯文本。您可以在服务器中构建div并输出UI:
library(shiny)
test_date <- as.Date(c('2019-01-01','2019-01-02','2019-01-03','2019-01-04'))
score <- c(75,80,85,90)
my_dataframe <- data.frame(test_date, score)
getColor <- function(x) {
if (x > 80) {
result <- "green"
}
else if (x > 50) {
result <- "yellow"
}
else {
result <- "red"
}
return(result)
}
ui <- htmlTemplate(
text_ = '
<html>
<head>
{{headContent()}}
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="application/shiny-singletons"></script>
<script type="application/html- dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.2.0]</script>
</head>
<body>
{{uiOutput("score_value")}}
</body>
</html>'
)
server <- function(input, output, session) {
output$score_value <- renderUI(
div(
renderText(
{mean(my_dataframe$score)}
),
style=paste0('color:',getColor(mean(my_dataframe$score)),';')
)
)
}
shinyApp(ui, server)