1让我们看一下这个例子:
1:3 %>% rep(.,2) + 1 %>% sum #[1] 2 3 4 2 3 4
[2] R正在做的是:
1:3 %>% rep(.,2) + (1 %>% sum)
[3]我想要R做的是:(这给出了错误),我喜欢在那里得到18
。
1:3 %>% (rep(.,2) + 1) %>% sum #Error in rep(., 2) : attempt to replicate an object of type 'closure'
[4]所以我需要超级跛脚:
tmp <- 1:3 %>% rep(.,2) + 1
tmp %>% sum #[1] 18
如何解决[3]工作。有人可以解释我的错误信息吗?
来自here
请注意,%&gt;%左侧的变量x将应用为 右侧函数中的第一个参数。这个默认值 行为可以改变使用。这被称为占位符。
然而,要记住的一件重要事情是,当。出现在 嵌套表达式仍然应用第一个参数规则。但是这个 可以使用花括号{}
来抑制行为
有趣的是,我不知道的是:
这是平等的:
1:3 %>% sum(rep(.,3)) #[1] 24
1:3 %>% sum(.,rep(.,3)) #[1] 24
这两者是平等的:
1:3 %>% {sum(rep(.,3))} #[1] 18
1:3 %>% rep(.,3) %>% sum #[1] 18
> packageVersion("magrittr")
[1] ‘1.5’
此:
?'%>%'
给出:(我不知道我的%&gt;%运算符背后是什么包,我不太喜欢那么说实话)
在以下软件包中找到了有关'%&gt;%'主题的帮助:
管道操作员(在库C:/ Program中的包tidyr中) 文件/ R / R-3.3.2 /库)magrittr正向管道操作员(包装中 库C中的magrittr:/ Program Files / R / R-3.3.2 / library)管道运算符 (在库C的包stringr中:/ Program Files / R / R-3.3.2 / library) 从其他包导出的对象(在库中的包dplyr中) C:/ Program Files / R / R-3.3.2 / library)
答案 0 :(得分:2)
二元运算符+
正在创建问题。它的优先级低于管道(参见?Syntax
)。在汇总到sum之前将整个操作括在括号中,或者使用+
的函数形式:
(1:3 %>% rep(.,2) + 1) %>% sum
[1] 18
1:3 %>% rep(.,2) %>% `+`(1) %>% sum
[1] 18