我正在开发一个简单的ShinyApp,它可以让最终用户使用各种过滤器来查询数据。某些过滤器对应于数据框列中的唯一值,这些值是使用与以下示例对应的代码创建的:
# Source sample data
data(mtcars)
# Put together menu element
mtcars$cyl <- as.character(mtcars$cyl)
ui_list_cyl <- unique(mtcars$cyl)
我&#39;随后将以这种方式创建的元素引入Shiny下拉小部件,如下面的代码所示:
# Sample widget elements that provides access to unique column values
selectInput("select", label = h3("Select box"),
choices = ui_list_cyl,
selected = 1),
我对多个列重复相同的过程,并且创建一个能够满足此要求的函数似乎是一个自然的选择。特别是,我会设想这个功能:
ui_list_originalCOLUMname
我的问题是:如何创建一个可以动态应用于数据框中任意选择列的函数,并返回名称包含已传递列名的对象?
答案 0 :(得分:1)
有几种方法可以编写你想要的功能。以下是此类函数的示例,该函数接受数据集和列名称并创建关联的选择输入。
mySelectInput <- function(data, col) {
id <- sprintf("select_%s", col)
label <- sprintf("Select %s", col)
choices <- sort(unique(data[[col]]))
selectInput(id, label, choices)
}
你可以在一个闪亮的应用程序中使用它
runApp(shinyApp(
ui = fluidPage(
lapply(c("cyl", "gear", "carb"), function(x) mySelectInput(mtcars, x))
),
server = function(input, output, session) {
}
))
这将为cyl
,gear
,carb
变量创建三个选择输入。我希望这会有所帮助,希望你能从这里开始并将其应用到你的需要