r语言 - 在函数内调用管道时传递参数



我想写一个函数,它是使用管道运算符%>%组成两个函数,这样,例如,以下内容是等效的(想象一下我称之为%O%):

iris[1:4] %>% lapply(FUN = function(x) hist(sample(x))
iris[1:4] %>% lapply(FUN = sample %O% hist)

我希望它朝这个方向(不是hist %O% sample),因为它将遵循与%>%相同的逻辑。

我得出了类似的东西:

'%O%' <- function(lhs1, rhs1){
    return(
        function(x){
            return(x %>% lhs1 %>% rhs1)
    })
}

但是,当我尝试时它会引发错误

iris[1:4] %>% lapply(FUN = sample(size = 100, replace = TRUE) %O% hist)

我应该怎么做才能让%O%函数内部的%>%理解参数?这是一个evalquote的问题吗?我也不太明白%>%如何能够阅读lhsrhs的论点.

任何帮助将不胜感激。多谢!

改用magrittr函数序列?

f <- . %>% sample() %>% hist()
iris[1:4] %>% lapply(f)

或者只是

iris[1:4] %>% lapply(. %>% sample() %>% hist())
以下是

一些可能性:

iris[1:4] %>% lapply(FUN = function(x) x %>% sample %>% hist) 
library(gsubfn)
iris[1:4] %>% fn$lapply(FUN = x ~ x %>% sample %>% hist)
library(functional)
iris[1:4] %>% lapply(FUN = Compose(sample, hist))
library(functional)
`%c%` <- Compose
iris[1:4] %>% lapply(FUN = sample %c% hist)

更新:添加了其他解决方案。

相关内容

  • 没有找到相关文章

最新更新