And*_*ico 5 r pipe dplyr magrittr
1让我们看看这个例子:
1:3 %>% rep(.,2) + 1 %>% sum #[1] 2 3 4 2 3 4
Run Code Online (Sandbox Code Playgroud)
[2] R 正在做的是:
1:3 %>% rep(.,2) + (1 %>% sum)
Run Code Online (Sandbox Code Playgroud)
[3] 我想让 R 做的是:(给出错误),我喜欢到达18那里。
1:3 %>% (rep(.,2) + 1) %>% sum #Error in rep(., 2) : attempt to replicate an object of type 'closure'
Run Code Online (Sandbox Code Playgroud)
[4] 所以我需要变得超级蹩脚:
tmp <- 1:3 %>% rep(.,2) + 1
tmp %>% sum #[1] 18
Run Code Online (Sandbox Code Playgroud)
我怎样才能修复 [3] 工作。有人可以向我解释错误消息吗?
从这里
请注意,%>% 左侧的变量 x 作为右侧函数中的第一个参数应用。可以使用 更改此默认行为。这称为占位符。
但是,要记住的一件重要事情是,当 . 出现在嵌套表达式中时,仍然应用第一个参数规则。但是可以使用花括号{}来抑制这种行为
有趣的是,我不知道的是:
这是相等的:
1:3 %>% sum(rep(.,3)) #[1] 24
1:3 %>% sum(.,rep(.,3)) #[1] 24
Run Code Online (Sandbox Code Playgroud)
这两个是相等的:
1:3 %>% {sum(rep(.,3))} #[1] 18
1:3 %>% rep(.,3) %>% sum #[1] 18
Run Code Online (Sandbox Code Playgroud)
> packageVersion("magrittr")
[1] ‘1.5’
Run Code Online (Sandbox Code Playgroud)
这个:
?'%>%'
Run Code Online (Sandbox Code Playgroud)
给出:(我不知道我的 %>% 操作符背后是什么包,老实说我不太喜欢那个)
在以下软件包中找到了有关“%>%”主题的帮助:
管道操作符(在库 C:/Program Files/R/R-3.3.2/library 中的包 tidyr) magrittr 前向管道操作符(在库 C:/Program Files/R/R-3.3.2/library 中的 magrittr 包中) ) 管道运算符(在库 C:/Program Files/R/R-3.3.2/library 中的包 stringr 中)从其他包导出的对象(在库 C:/Program Files/R/R-3.3.2/ 中的包 dplyr 中)图书馆)
二元运算符+造成了问题。它的优先级低于管道(请参阅参考资料?Syntax)。在管道求和之前将整个操作括在括号中,或者使用以下函数形式+:
(1:3 %>% rep(.,2) + 1) %>% sum
[1] 18
1:3 %>% rep(.,2) %>% `+`(1) %>% sum
[1] 18
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |