如何在Shiny应用中显示summary()生成的含统计项描述的结果?
在Shiny应用中展示带描述项的summary()统计摘要
嘿,这个问题其实很好解决——你当前的代码用了renderText(),它会把summary()返回的结构化对象转换成纯文本字符串,导致丢失了"mean"、"median"这些关键的描述项。只需要把renderText()换成renderPrint(),就能完美保留summary()原有的格式,让描述项和对应数值一起显示出来。
修改后的完整可运行代码
library(shiny) # 模拟响应式数据框 data <- reactive( data.frame( group = sample(c("A", "B"), 100, replace = TRUE), var1 = round(runif(100, min = 0, max = 100), 0), var2 = sample(c("A", "B"), 100, replace = TRUE) ) ) # 用户界面 ui <- fluidPage( verbatimTextOutput("text1") ) # 服务器端(关键修改在这里) server <- function(input, output) { output$text1 <- renderPrint({ # 直接输出summary结果,会保留所有格式和描述项 summary(data()$var1) }) } # 启动应用 shinyApp(ui = ui, server = server)
原理说明
summary()针对数值型变量返回的是一个带命名的向量,每个数值都对应Min.、1st Qu.、Median等描述标签renderText()会调用as.character()将对象扁平化处理,只保留数值部分,丢失标签renderPrint()则会调用R原生的print()函数来输出对象,完全保留原有的打印格式,包括标签和数值的对应关系
额外小技巧
如果想展示整个数据框的完整统计摘要(包括分类变量的频数统计),只需要把summary(data()$var1)改成summary(data())就行,renderPrint()同样能完美适配。
内容的提问来源于stack exchange,提问作者D. Studer
相关产品推荐
相关产品推荐

