【问题标题】:Creating a generic function generating new objects from selected list of columns in a data frame创建一个通用函数,从数据框中的选定列列表生成新对象
【发布时间】:2015-08-18 22:34:27
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: r function user-interface shiny


    【解决方案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 变量创建三个选择输入。我希望这会有所帮助,希望您可以从这里获取并将其应用于您的需要

    【讨论】:

    • 谢谢,它确实有效,而且它是一个很好的解决方案,可以应用于选定数据库的多个列。关于通过lapply(c("cyl", "gear", "carb"), function(x) mySelectInput(mtcars, x)) 创建界面元素,我必须修改一些标签等,所以我不一定愿意自动创建所有元素。我宁愿创建这些列表,以后能够修改每个 selectInput 元素,这样看起来是需要的方式,但正如你所说,我应该能够修改你的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2012-11-14
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多