R语言 如何将前向管道操作符与匿名函数结合使用合并

avkwfej4  于 2023-10-13  发布在  其他
关注(0)|答案(3)|浏览(109)

是否可以将前向管道操作符与匿名函数结合使用合并?如果是这样,我该怎么做呢?
我明白了基本的想法是以顺序的方式传递参数来执行函数。就像下面一样,首先匿名函数计算总和,然后将其传递给阶乘函数。
我怎么能做同样的事呢
这就是我尝试使用forward-pipe操作符执行的操作:

calculate <- function(func,d)
 {
   func(d)
   }

factorial(calculate(function(x){x+1},7)) # function x is the anonymous function

我的代码使用了forward-pipe操作符-

7 %>% calculate(function(x){x+1}) %>% fact()

预期结果是40320,但结果是
func(d)中的错误:无法找到函数“func”

llmtgqce

llmtgqce1#

另一种选择是使用name显式调用calculate的参数。

7 %>% calculate(func=function(x){x+1}) %>% factorial()
to94eoyn

to94eoyn2#

当你使用%>%时,参数(在你的例子中是7)被插入作为前面函数的第一个参数。因此,7 %>% calculate(function(x){x+1})实际上计算为calculate(7, function(x){x+1})
你可以用

7 %>% calculate(function(x){x+1}, .) %>% factorial()

或者使用命名参数,因为7与剩余的参数匹配。

zbq4xfa0

zbq4xfa03#

您还可以使用R 4.1.0(2021年5月)中引入的原生管道|>和匿名函数\(x)操作符:

calculate <- function(func,d) func(d)
7  |> calculate(func=\(x) x+1) |>  factorial()
#> [1] 40320

你也可以在一行中使用它,而不定义calculate

7  |> {\(x) x+1}() |>  factorial()
#> [1] 40320

创建于2023-09-28带有reprex v2.0.2

相关问题