我正在研究闪亮的数据表功能,我有兴趣创建一个wellpanel或sidepanel,列出数据表的所有列,并允许用户选择他们想要在数据表上看到哪些列。
现在,此代码显示玩具数据集mtcars
library(shiny)
runApp(list(
ui = basicPage(
h2('The mtcars data'),
dataTableOutput('mytable')
),
server = function(input, output) {
output$mytable = renderDataTable({
mtcars
})
}
))
我有兴趣为用户提供使用复选框打开或关闭这些列的功能
[1] "mpg" "cyl" "disp" "hp" "drat"
[6] "wt" "qsec" "vs" "am" "gear"
[11] "carb"
解决这个问题的任何帮助都很受欢迎。提前谢谢。
答案 0 :(得分:4)
这是一个例子。它使用selectInput
来选择列,并默认显示所有列,直到您选择一个或多个特定列。
library(shiny)
runApp(list(
ui = basicPage(
selectInput("select", "Select columns to display", names(mtcars), multiple = TRUE),
h2('The mtcars data'),
dataTableOutput('mytable')
),
server = function(input, output) {
output$mytable = renderDataTable({
columns = names(mtcars)
if (!is.null(input$select)) {
columns = input$select
}
mtcars[,columns,drop=FALSE]
})
}
))
答案 1 :(得分:3)
我的示例使用checkboxGroupInput
来选择多个列
library(shiny)
vchoices <- 1:ncol(mtcars)
names(vchoices) <- names(mtcars)
runApp(list(
ui = basicPage(
h2('The mtcars data'),
checkboxGroupInput("columns","Select Columns",choices=vchoices,inline = T),
dataTableOutput('mytable')
),
server = function(input, output) {
observeEvent(input$columns,{
cols <- as.numeric(input$columns)
if(length(input$columns) == 1){
df <- data.frame(mtcars[,cols])
names(df) <- names(mtcars)[cols]
output$mytable = renderDataTable(df)
}else{
output$mytable = renderDataTable(mtcars[,cols])
}
})
}
))