你如何调用一个在管道中不接受输入的函数?
How do you call a function that takes no inputs within a pipeline?
我尝试搜索此问题,但找不到任何类似的问题。比方说,为了一个简单的例子,我想使用 dplyr
的管道 %>%
.
执行以下操作
c(1,3,5) %>% ls() %>% mean()
撇开像这样的管道的用例是什么,我如何调用不需要来自左侧并将它们传递给管道中的下一个函数?基本上,我想在我的管道中加入某种“间歇”或“中断”,让该功能完成它的工作,然后继续我的快乐之路。 显然,以上实际上不起作用,我知道 T 管道 %T>%
在这里也没有用,因为它仍然期望中间函数需要输入来自lhs。这里是否有避免分配中间对象和重新启动管道的选项?
我不知道是否有内置函数,但您当然可以为此创建一个辅助函数
> callfun <- function(x, fun){fun(); return(x)}
> c(1, 3, 5) %>% callfun(fun = ls) %>% mean()
# [1] 3
我真的不明白这一点,但是嘿 - 这是你的生活。
使用“magrittr”管道运算符,您可以将操作数放入 {…}
以防止自动参数替换:
c(1,3,5) %>% {ls()} %>% mean()
# NA
# Warning message:
# In mean.default(.) : argument is not numeric or logical: returning NA
…但这当然没有任何用处。
顺便说一下,管道内的 ls()
是在它自己的环境而不是调用环境中执行的,因此它在这里的使用甚至 less 有用。但是可以使用返回合理值 的不同函数 ,例如:
c(1,3,5) %>% {rnorm(10)} %>% mean()
# [1] -0.01068046
或者,如果您打算传递左侧,跳过中间部分 ls()
,您可以执行以下操作:
c(1,3,5) %>% {ls(); .} %>% mean()
# [1] 3
... 同样,在这里使用 ls()
没有任何意义,但其他一些有副作用的函数会起作用。
您可以像这样定义一个辅助函数,它接受一个它不使用的参数以使其适合管道:
ls_return_x <- function(x){
print(ls())
x
}
c(1,3,5) %>% ls() %>% mean()
请注意,此示例中的 ls()
调用将在 ls_return_x()
函数内打印环境中的对象。如果您想从全局环境中打印环境,请查看 ls()
的帮助页面。
我尝试搜索此问题,但找不到任何类似的问题。比方说,为了一个简单的例子,我想使用 dplyr
的管道 %>%
.
c(1,3,5) %>% ls() %>% mean()
撇开像这样的管道的用例是什么,我如何调用不需要来自左侧并将它们传递给管道中的下一个函数?基本上,我想在我的管道中加入某种“间歇”或“中断”,让该功能完成它的工作,然后继续我的快乐之路。 显然,以上实际上不起作用,我知道 T 管道 %T>%
在这里也没有用,因为它仍然期望中间函数需要输入来自lhs。这里是否有避免分配中间对象和重新启动管道的选项?
我不知道是否有内置函数,但您当然可以为此创建一个辅助函数
> callfun <- function(x, fun){fun(); return(x)}
> c(1, 3, 5) %>% callfun(fun = ls) %>% mean()
# [1] 3
我真的不明白这一点,但是嘿 - 这是你的生活。
使用“magrittr”管道运算符,您可以将操作数放入 {…}
以防止自动参数替换:
c(1,3,5) %>% {ls()} %>% mean()
# NA
# Warning message:
# In mean.default(.) : argument is not numeric or logical: returning NA
…但这当然没有任何用处。
顺便说一下,管道内的 ls()
是在它自己的环境而不是调用环境中执行的,因此它在这里的使用甚至 less 有用。但是可以使用返回合理值 的不同函数 ,例如:
c(1,3,5) %>% {rnorm(10)} %>% mean()
# [1] -0.01068046
或者,如果您打算传递左侧,跳过中间部分 ls()
,您可以执行以下操作:
c(1,3,5) %>% {ls(); .} %>% mean()
# [1] 3
... 同样,在这里使用 ls()
没有任何意义,但其他一些有副作用的函数会起作用。
您可以像这样定义一个辅助函数,它接受一个它不使用的参数以使其适合管道:
ls_return_x <- function(x){
print(ls())
x
}
c(1,3,5) %>% ls() %>% mean()
请注意,此示例中的 ls()
调用将在 ls_return_x()
函数内打印环境中的对象。如果您想从全局环境中打印环境,请查看 ls()
的帮助页面。