我有一个值向量,每个值都与一个名称相关联;矢量的长度根据用户输入而变化。虽然我使用了
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”,需要水平滚动页面才能看到所有值。
width
中的renderTable
没有提供任何解决方案转换数据进入 html 对象/文本可能是一种选择,但不确定如何保留名称。
您可以将
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)