如何迭代地将参数传递给 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
尝试已接近,但您需要使用常规函数,而不是paste
。 unique(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 中的基于类的视图实例?
如何正确地将参数传递给基于类的视图测试 Django Rest Framework?