在函数内部调用管道时传递参数
pass arguments when pipe is called inside a function
我想编写一个函数,它是使用管道运算符 %>%
的两个函数的组合,因此,例如,以下是等价的(假设我称之为 %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%
函数中的 %>%
理解参数?是 eval
和 quote
的问题吗?我也不太明白 %>%
是如何读取 lhs
和 rhs
中的参数的。
如有任何帮助,我们将不胜感激。非常感谢!
这里有一些可能性:
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)
更新:添加了额外的解决方案。
改为使用 magrittr
功能序列?
f <- . %>% sample() %>% hist()
iris[1:4] %>% lapply(f)
或者只是
iris[1:4] %>% lapply(. %>% sample() %>% hist())
我想编写一个函数,它是使用管道运算符 %>%
的两个函数的组合,因此,例如,以下是等价的(假设我称之为 %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%
函数中的 %>%
理解参数?是 eval
和 quote
的问题吗?我也不太明白 %>%
是如何读取 lhs
和 rhs
中的参数的。
如有任何帮助,我们将不胜感激。非常感谢!
这里有一些可能性:
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)
更新:添加了额外的解决方案。
改为使用 magrittr
功能序列?
f <- . %>% sample() %>% hist()
iris[1:4] %>% lapply(f)
或者只是
iris[1:4] %>% lapply(. %>% sample() %>% hist())