如何迭代地将参数传递给 R 函数

Posted

技术标签:

【中文标题】如何迭代地将参数传递给 R 函数【英文标题】:How to iteratively pass arguments into an R function 【发布时间】:2019-07-17 22:52:25 【问题描述】:

对于某些背景,我正在 R 中创建一个具有下拉式过滤器的图,并且要创建过滤器,我需要将所有值传递给一个函数。

我的问题适用于除了创建情节之外的情况。

本质上,我传递的每个参数都是相同的,只是索引在变化([1] 到 [8])。有没有更简洁的写法?当我创建一个包含 30 多个下拉选项的绘图时,这将派上用场。

buttons = list(
  unique(df$FAC_DESCRIPTION)[1],
  unique(df$FAC_DESCRIPTION)[2],
  unique(df$FAC_DESCRIPTION)[3],
  unique(df$FAC_DESCRIPTION)[4],
  unique(df$FAC_DESCRIPTION)[5],
  unique(df$FAC_DESCRIPTION)[6],
  unique(df$FAC_DESCRIPTION)[7],
  unique(df$FAC_DESCRIPTION)[8]
)

编辑:我上面粘贴的代码实际上是我实际尝试做的简化版本,当我使用 [1:8] 方法时它不起作用。这更接近实际代码(仅缩短为前三个元素,而不是 8:

buttons = list(
            list(method = "r",args = list("t[0].value", unique(df$FAC)[1]),label =unique(df$FAC)[1]), 
            list(method = "r",args = list("t[0].value", unique(df$FAC)[2]),label =unique(df$FAC)[2]), 
            list(method = "r",args = list("t[0].value", unique(df$FAC)[3]),label =unique(df$FAC)[3])
)

但是,当我尝试以下方法时,它不起作用 - 是因为我在两个地方使用它吗?

buttons = list(
            list(method = "r",args = list("t[0].value", unique(df$FAC)[1:3]),label =unique(df$FAC)[1:3])
)

我也试过了:

dropdown_options <- lapply(1:5, function(x)list(paste('method = "r", args = list("transforms[0].value", unique(df$FAC)[',x,']),label = unique(df$FAC)[',x,']',sep='')))

buttons = do.call(list, dropdown_options)

但这也没有用。

【问题讨论】:

一般情况下,请参阅?do.call。然而,这看起来像buttons = as.list(unique(df$FAC_DESCRIPTION)[1:8])。如果只有 8 个唯一值,则不需要 [1:8] 在 cmets 中读取未格式化的代码非常困难。如果您问题中的示例不是很好,只需编辑您的问题以使用新示例。 @Gregor 我编辑了这个问题,你有机会再看看吗? 【参考方案1】:

您的lapply 尝试已接近,但您需要使用常规函数,而不是pasteunique(df$FAC)[x] 不是原始代码中的字符串,因此它不应该是 lapply 中的字符串。

dropdown_options <- lapply(1:5, function(x) 
  list(method = "r", 
       args = list(
         "t[0].value",
         unique(df$FAC)[x]),
       label = unique(df$FAC)[x]
      )
)

这应该是等效的,但除非你分享一些我无法测试的样本 df$FAC 数据。

【讨论】:

以上是关于如何迭代地将参数传递给 R 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地将参数传递给 Flutter/Dart 中的 Widget?

如何正确地将参数传递给 Django 中的基于类的视图实例?

Swift:如何选择性地将函数作为参数传递并调用函数?

如何正确地将参数传递给基于类的视图测试 Django Rest Framework?

如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递给 COM 方法?

如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]