Shiny应用输出仅在控制台显示、不在主面板展示的问题求助
问题原因及修复方案
你的代码存在以下几处核心问题导致输出无法展示在前端页面:
- 函数调用不匹配:你自定义的取诗句函数名为
Vector(首字母大写),但服务端调用时写的是小写的vector,实际调用了R内置的向量生成函数,没有执行你写的取诗句逻辑 - 自定义函数无返回值:你写的
Vector函数里仅用print()输出内容,print()只会将内容打印到控制台,不会把诗句作为返回值传给Shiny的渲染函数 - 服务端语法错误:
server函数的逻辑块应该用大括号{}包裹,你错误使用了圆括号() - 输入变量名错误:取第14行输入值时写的是
input$14,实际应该是input$line14 - 字符串拼接缺少换行配置:
paste()函数没有指定换行参数,生成的诗句会挤在同一行 - 侧边栏标签语法错误:
h3("Build Your Poem"缺少闭合括号,会导致页面渲染异常
修正后的完整代码如下:
library(shiny) library(tidyverse) Sonnets <- read_csv("https://blades.byu.edu/hon290/hon290cofwsonnets2021.text") library(english) # 改造自定义函数,添加返回值逻辑 get_poem <- function(mylines) { poem_lines <- c() for(i in 1:14) { line_text <- Sonnets %>% filter(sonnet==mylines[i] & line==i) %>% pull(text) poem_lines <- c(poem_lines, line_text) } # 返回带换行的完整诗句 return(paste(poem_lines, collapse = "\n")) } # 修正server逻辑块括号为大括号 server = function(input, output) { output$q <- renderText({ # 调用自定义函数,修正第14行输入变量名 get_poem(c(input$line1, input$line2, input$line3, input$line4, input$line5, input$line6, input$line7, input$line8, input$line9, input$line10, input$line11, input$line12, input$line13, input$line14)) }) } ui<- fluidPage( titlePanel("City of Women Sonnets"), tabsetPanel( tabPanel("Sonnet Generator By Line", sidebarLayout( sidebarPanel( h3("Build Your Poem"), fluidRow( column(6, numericInput("line1", "Line 1", min=1, max=23, value=1)), column(6, numericInput("line2", "Line 2", min=1, max=23, value=1)), column(6, numericInput("line3", "Line 3", min=1, max=23, value=1)), column(6, numericInput("line4", "Line 4", min=1, max=23, value=1)), column(6, numericInput("line5", "Line 5", min=1, max=23, value=1)), column(6, numericInput("line6", "Line 6", min=1, max=23, value=1)), column(6, numericInput("line7", "Line 7", min=1, max=23, value=1)), column(6, numericInput("line8", "Line 8", min=1, max=23, value=1)), column(6, numericInput("line9", "Line 9", min=1, max=23, value=1)), column(6, numericInput("line10", "Line 10", min=1, max=23, value=1)), column(6, numericInput("line11", "Line 11", min=1, max=23, value=1)), column(6, numericInput("line12", "Line 12", min=1, max=23, value=1)), column(6, numericInput("line13", "Line 13", min=1, max=23, value=1)), column(6, numericInput("line14", "Line 14", min=1, max=23, value=1)), )) ), mainPanel(h3("poem"), textOutput("q")) )) ) ) shinyApp(ui=ui, server=server)
内容的提问来源于stack exchange,提问作者Sannaco
相关产品推荐
相关产品推荐

