显示以屏幕宽度环绕的值向量

问题描述 投票:0回答:1

我有一个值向量,每个值都与一个名称相关联;矢量的长度根据用户输入而变化。虽然我使用了

table
相关命令,但我喜欢知道显示此类数据的其他方式,它本质上是一个带有名称的值的向量(单行)。当选定的样本大小产生大于屏幕宽度的输出时,就会出现问题。水平滚动可以灵活地浏览数据,但我正在寻找一种解决方案,可以将数据包装在屏幕宽度上并以多行打印,而无需滚动。这是播放代码:

ui <- fluidPage(
   tabPanel("Test",
            numericInput("samsize","specify sample size",4,1,52),
            tableOutput('table')
   ))

server <- function(input, output) {

   data <- reactive({

      # create a vector of lower- and upper- case alphabets
      # create a vector assigning numbers to alphabets
      alphabets <- c(letters,LETTERS)
      Index <- seq(1,length(alphabets),1)
      names(Index) <- alphabets

      # sample values
      SampleIndex <- sample(Index,input$samsize)

      # convert it into a matrix
      data <- matrix(SampleIndex,nrow=1)
      colnames(data)=names(SampleIndex)

      data
   })

   output$table <- renderTable(data(),digits = 0)

}

shinyApp(ui, server)

如下图所示,对于样本大小“36”,需要水平滚动页面才能看到所有值。screen shot

width
中的
renderTable
没有提供任何解决方案

转换数据进入 html 对象/文本可能是一种选择,但不确定如何保留名称。

html css r dataframe shiny
1个回答
2
投票

您可以将

renderUI
uiOutput
一起使用来创建自己想要显示的 HTML 对象,例如使用
div
:

library(shiny)
ui <- fluidPage(
  tabPanel("Test",
           numericInput("samsize","specify sample size",4,1,52),
           uiOutput('myTable')
  ))

server <- function(input, output) {
  data <- reactive({
    alphabets <- c(letters,LETTERS)
    Index <- seq(1,length(alphabets),1)
    names(Index) <- alphabets

    # Notice I don't put the vector in a one row matrix as in you example
    sample(Index,input$samsize)
  })

  library(purrr) # map is a nice alternative to lapply
  output$myTable <- renderUI(map(names(data()),~div(strong(.),
                                                    div(data()[.]),
                                                    style="float:left;padding:10px 20px;")))
}

shinyApp(ui, server)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.