创建通用函数,从数据框中的选定列列表生成新对象

时间:2015-06-04 10:44:03

标签: r function user-interface shiny

我正在开发一个简单的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),

我对多个列重复相同的过程,并且创建一个能够满足此要求的函数似乎是一个自然的选择。特别是,我会设想这个功能:

  1. 适用于我传递给它的一组列
  2. 创建与界面元素名称ui_list_originalCOLUMname
  3. 对应的对象

    我的问题是:如何创建一个可以动态应用于数据框中任意选择列的函数,并返回名称包含已传递列名的对象?

1 个答案:

答案 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) {
  }
))

这将为cylgearcarb变量创建三个选择输入。我希望这会有所帮助,希望你能从这里开始并将其应用到你的需要