同一个函数用不同的参数连续调用多次使用dubr管道?

bmp9r5qi  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(85)

我想实现的一般是,我可以做到以下几点:

df %>%
    exampleFunction(1) %>%
    exampleFunction(2) %>%
    exampleFunction(3) %>%
    ...
    exampleFunction(n)

而exampleFunction应该是这样的:

exampleFunction <- function(data, value) {
    #something is done here with the data and value...
    #...and then a new data is returned
}

那么,如何才能实现这一目标呢?
当然,我总是可以用途:

eval(parse(text="(some dynamically generated code as string)")

……但我不想。:)

ztyzrc3y

ztyzrc3y1#

请记住,管道(本质上)是嵌套函数调用的快捷方式。因此,您的管道大致相同:

exampleFunction(
  exampleFunction(
    exampleFunction(
      exampleFunction(
        exampleFunction(df, 1),
        2
      ),
      3
    ),
  …,
  n
)

这是一个推广的代码1 + 2 + 3 + … + n(与+取代exampleFunction,其中df采取的第一个数字)。这种模式在函数式编程中被称为 reduction。Core R在Reduce()函数中实现了它,各种其他软件包实现了它们自己的变体(例如:‘purrr’)。
用法如下:

result = Reduce(f, along, init)

对你来说就是

result = Reduce(exampleFunction, seq_len(n), df)

或者,您也可以使用for循环显式写出命令式代码步骤:

result = df
for (i in seq_len(n)) {
  result = exampleFunction(result, i)
}

相关问题