r - Shiny中的内联文本输出
问题描述
我对制作闪亮的应用程序比较陌生。我遇到了一个问题,我试图最简化相关部分。基本上,我想在固定文本内有一个输出文本。这是简化版的样子:
library(shiny)
ui <- fluidPage(
sliderInput(inputId = "value", label = "Input your number here", min = 0, max = 30, step = 1, value = 16),
p("Your result is ", textOutput(outputId = "result"), ".")
)
server <- function(input, output){
output$result <- renderText({
if(input$value >= 15)
return("good")
else
return("bad")
})
}
shinyApp(ui = ui, server = server)
如果滑块在 15 或更多,您可以看到文本应该具有“好”作为输出。但是,不是像我想要的那样这样做:Your result is good.
它这样做:
Your result is
good
.
textOutput
是否在p()
标签内似乎并不重要。paste0()
而且paste
似乎只会使情况变得更糟:
ui <- fluidPage(
sliderInput(inputId = "value", label = "Input your number here", min = 0, max = 30, step = 1, value = 16),
p(paste("Your result is ", textOutput(outputId = "result"), "."))
)
给
Your result is <div id="result" class="shiny-text-output"></div> .
它在一行中,但确实不是我想要的。
我不知道是否有一种方法可以在不将整个句子写在renderText
函数内的情况下完成这项工作。这是可行的,但我觉得应该有一种方法可以做到这一点,而无需重复句子的其余部分。不过,我明白如果没有。但是,我想知道为什么...
写完之后,我意识到我可以在服务器端这样做:
ui <- fluidPage(
sliderInput(inputId = "value", label = "Input your number here", min = 0, max = 30, step = 1, value = 16),
p(textOutput(outputId = "result"))
)
server <- function(input, output){
output$result <- renderText({
if(input$value >= 15)
text <- "good"
else
text <- "bad"
paste0("Your data is ", text, ".")
})
}
它奏效了:Your data is good.
。但是我仍然不明白为什么如果我在 ui 中这样做它不起作用......是否有可能,我只是没有做某事,或者它就是这样工作的?为什么?我不明白......为什么它会跳到行,写输出,然后继续下一行?
到目前为止,我的问题更多是关于理解它(不)如何工作以及为什么工作而不是实际问题,但是当我知道自己在做什么时,我工作得最好,所以我仍然认为这是一个有效的问题......
解决方案
添加inline=T
删除换行符
p("Your result is", textOutput(outputId = "result"), ".") ## old
p("Your result is", textOutput(outputId = "result", inline=T), ".") ## new
这给了
Your result is good .
从帮助文件中,inline
控制span
是否div
使用
inline use an inline (span()) or block container (div()) for the output
期间之前有一个空格,我目前无法弄清楚如何删除它。但我想我还是会发布这个,因为它是其中的一部分,也许你知道如何删除它。
完整代码
library(shiny)
ui <- fluidPage(
sliderInput(inputId = "value", label = "Input your number here", min = 0, max = 30, step = 1, value = 16),
p("Your result is", textOutput(outputId = "result", inline=T), ".")
)
server <- function(input, output){
output$result <- renderText({
if(input$value >= 15)
return("good")
else
return("bad")
})
}
shinyApp(ui = ui, server = server)
推荐阅读
- r - R如何按行值分组,拆分或子集
- javascript - swiper.js 自定义上一个和下一个按钮在点击时不起作用
- html - 获取单选按钮的值并将其用于计算的问题
- java - 在 JAVA 中保存 h264 文件有效,但在 android 中保存损坏的文件
- python - 如何从python中的响应中解码电报西里尔字母“first_name”?
- c++ - 您应该通过命令行使用 curl 还是包含库?
- node.js - 如何从 axios 获取数据到 module.exports
- c - 自定义树莓派操作系统的 Makefile 不工作
- android - 如何更改 Material Design TextInputLayout 提示文本颜色?
- java - 你可以在java的while循环中添加多个问题吗?