如何解决Shiny中verbatimTextOutput的摘要截断与索引问题
解决Shiny中因子摘要截断和唯一值带索引的问题
我来帮你搞定这两个小问题,咱们一个个说:
问题1:摘要统计只显示前6个因子,其余显示为(Other)
这是因为base R的summary()函数对因子类型默认只展示前6个水平,剩下的会自动合并成(Other)。解决方法很简单,给summary()加个maxsum参数,设置成比你的因子总水平数大的值就行(比如这里字母一共26个,设成maxsum=100就足够覆盖所有情况)。
问题2:展示唯一值时每个字母前带索引
这是因为你用data[input$column2]提取的是数据框,而不是单个因子向量。unique()处理数据框时会保留行索引,所以才会显示那些数字。改成用双括号data[[input$column2]]提取列向量就没问题了,这样unique()返回的就是纯因子值,不会带索引。
修改后的完整可复现代码
# Load packages library(shiny) # Load data data <- data.frame(letters = factor(sample(LETTERS, 200, replace=TRUE))) # Define UI ui <- fluidPage( sidebarPanel( radioButtons(inputId = "column", label = "Choose a summary column:", choices = colnames(data)), radioButtons(inputId = "column2", label = "Choose a unique column:", choices = colnames(data)) ), mainPanel( verbatimTextOutput("summary"), verbatimTextOutput("unique") ) ) # Define server logic server <- function(input, output) { output$summary <- renderPrint({ # 加入maxsum参数,显示所有因子水平 summary(data[input$column], maxsum = 100) }) output$unique <- renderPrint({ # 用双括号提取向量,避免返回数据框带索引 unique(data[[input$column2]]) }) } # Create Shiny object shinyApp(ui = ui, server = server)
你可以运行这段代码试试,现在摘要会显示所有26个字母的计数,唯一值也会干净地列出每个字母啦~
内容的提问来源于stack exchange,提问作者user4148072
相关产品推荐
相关产品推荐

