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

时间:2019-07-17 22:52:25

标签: r

对于某些背景,我正在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)

但是那也不起作用。

1 个答案:

答案 0 :(得分:0)

您的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数据。