在Shiny应用中使用verbatimTextOutput为何出现placeholder错误?
解决Shiny应用中「shiny-text-output noplaceholder」错误
错误原因
你在UI代码里直接用paste()拼接verbatimTextOutput组件是错误操作。verbatimTextOutput()返回的是Shiny的UI组件对象,并非普通字符串,使用paste()会将其强制转换为字符形式,导致Shiny无法识别正确的输出占位符,从而触发「shiny-text-output noplaceholder」错误。
解决方案
有两种可行的修正方式,可根据需求选择:
方式1:在UI中直接组合文本与输出组件
利用Shiny的HTML标签或布局函数,直接将静态文本和输出组件放在同一容器内,无需使用paste():
library(shiny) library(shinyWidgets) library(shinydashboard) centers<-structure(list(State = "Alabama", Y = 32.7760928445334, X = -86.830460056472), row.names = 20L, class = "data.frame") ui <- dashboardPage( dashboardHeader(title="Mock up"), dashboardSidebar(collapsed = T), dashboardBody( # 使用tags$div包裹文本和输出组件 tags$div( "LONGITUDE:", verbatimTextOutput("v1"), " ", # 添加空格分隔内容 "LATITUDE:", verbatimTextOutput("v2") ) ) ) server <- function(input, output) { output$v1<-renderText({ centers[1,2] }) output$v2<-renderText({ centers[1,3] }) } shinyApp(ui, server)
如果需要更规整的布局,可使用fluidRow和column拆分显示:
dashboardBody( fluidRow( column(6, tags$p("LONGITUDE:", verbatimTextOutput("v1"))), column(6, tags$p("LATITUDE:", verbatimTextOutput("v2"))) ) )
方式2:在Server端拼接完整文本后输出
如果希望直接输出拼接好的字符串,可在Server端完成文本与数据的拼接,再通过单个输出组件展示:
library(shiny) library(shinyWidgets) library(shinydashboard) centers<-structure(list(State = "Alabama", Y = 32.7760928445334, X = -86.830460056472), row.names = 20L, class = "data.frame") ui <- dashboardPage( dashboardHeader(title="Mock up"), dashboardSidebar(collapsed = T), dashboardBody( verbatimTextOutput("coords") ) ) server <- function(input, output) { output$coords <- renderText({ paste("LONGITUDE:", centers[1,2], "LATITUDE:", centers[1,3]) }) } shinyApp(ui, server)
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

