不需要将if-else语句放在输出中,因为按列对数据帧进行子集设置将为您提供此处所需的值。我不能完全复制你的代码,也许这能给你一个主意。
library(shiny)
choices <- c("Select All", names(mtcars))
ui <- fluidPage(
selectInput("dup_var", "Variable", choices, multiple = TRUE),
DT::dataTableOutput("dup_data")
)
server <- function(input, output, session) {
observe({
if ("Select All" %in% input$dup_var) {
allchoices <- setdiff(choices, "Select All")
updateSelectInput(session, "dup_var", selected = allchoices)
}
})
output$dup_data <- DT::renderDataTable({
data <- mtcars[input$dup_var]
do.call(rbind, lapply(names(data), function(name) {
x <- data[, name, drop = TRUE]
aggregate(list(count = x), by = list(name = x), length)
})) -> df
df <- df[df$count > 1, ]
data.frame(duplicate_count = df$count, x = df[,!names(df) %in% "count"],
stringsAsFactors = FALSE)
}, rownames = FALSE)
}
shinyApp(ui, server)