我对制作闪亮应用程序还比较陌生。我遇到一个问题,我尽量简化相关部分。基本上,我希望在固定文本内有一个输出文本。这是简化版本的样子:
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)
Run Code Online (Sandbox Code Playgroud)
您可以看到,如果滑块位于 15 或更高,则文本应该具有“good”作为输出。然而,不是像我想要的那样这样做:Your result is good.它这样做:
Your result is
good
.
Run Code Online (Sandbox Code Playgroud)
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"), "."))
)
Run Code Online (Sandbox Code Playgroud)
给出
Your result is <div id="result" class="shiny-text-output"></div> .
Run Code Online (Sandbox Code Playgroud)
它在一行中,但确实不是我想要的。
我不知道是否有一种方法可以在不将整个句子写在函数内的情况下完成这项工作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, ".")
})
}
Run Code Online (Sandbox Code Playgroud)
有效:Your data is good.。但我仍然不明白为什么如果我在用户界面中执行它就不起作用...是否有可能,而我只是没有做某事,或者这就是它的工作原理?为什么?我不明白...为什么它会跳到行,写入输出,然后继续下一行?
到目前为止,我的问题更多的是关于理解它如何以及为什么不起作用,而不是一个实际问题,但当我知道自己在做什么时,我的工作效果最好,所以我仍然认为这是一个有效的问题......
添加inline=T删除换行符
p("Your result is", textOutput(outputId = "result"), ".") ## old
p("Your result is", textOutput(outputId = "result", inline = TRUE), ".") ## new
Run Code Online (Sandbox Code Playgroud)
这给出了
Your result is good .
Run Code Online (Sandbox Code Playgroud)
从帮助文件中,inline控制是否使用span或div
inline use an inline (span()) or block container (div()) for the output
Run Code Online (Sandbox Code Playgroud)
句号之前有一个空格,我目前不知道如何删除它。但我想无论如何我都会发布这个,因为它是那里的一部分,也许你确实知道如何删除它。
完整代码
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 = TRUE), ".")
)
server <- function(input, output){
output$result <- renderText({
if(input$value >= 15)
return("good")
else
return("bad")
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)