我正在开发一个简单的ShinyApp,它将使最终用户能够使用各种过滤器来查询数据。一些过滤器对应于数据框架列中的唯一值,这些列是使用以下示例对应的代码创建的:
# Source sample data
data(mtcars)
# Put together menu element
mtcars$cyl <- as.character(mtcars$cyl)
ui_list_cyl <- unique(mtcars$cyl)
随后将以这种方式创建的元素引入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
我的问题是:如何创建一个可以动态应用于数据框架中任意选择的列的函数,并将返回包含传入列名的名称的对象?
有几种方法可以编写所需的函数。下面是这样一个函数的示例,它接受一个数据集和一个列名,并创建关联的select输入。
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
变量创建三个选择输入。我希望这对你有帮助,希望你能从这里学到并应用到你的需要