R

时间:2017-12-11 23:21:01

标签: r dplyr pipe

我是%>% / magrittr dplyr运算符的忠实粉丝,并尽可能使用它。但是,我遇到了问题,使用它来管道seq()函数。

作为一个简单的例子,假设我有一个变量x,我想创建一个从x-5x+5的序列。我可以这样做:

> x <- 10
> seq(from = x-5, to = x+5, by = 1)
 [1]  5  6  7  8  9 10 11 12 13 14 15

但是对于我的生活,我无法通过管道使其正常工作。为了演示,让我稍微谈谈这个问题。假设x <- 10

管道在某些情况下有效......

以下示例将10静默地传送到from参数,并使用.和一些算术将to参数设置为15 ,按预期给出序列10:15

> x %>% seq(.+5)
[1] 10 11 12 13 14 15

我可以明确设置from参数,如下所示,它也会提供相同的预期结果(10:15):

> x %>% seq(from = ., to = .+5)
[1] 10 11 12 13 14 15

但在其他人身上不起作用......

现在对前一个例子进行一些调整。我想尝试复制我的初始示例并生成从x-5x+5的序列。我希望我可以将from参数设置为.-5,但这不会产生预期结果:

> x %>% seq(from = .-5, to = .+5)
[1]  5 15

似乎fromto分别正确设置为515。但似乎by参数已设置为.(即10),以提供意外结果5 15而不是序列5:15

我可以尝试显式设置by参数,但现在我收到错误:

> x %>% seq(from = .-5, to = .+5, by = 1)
Error in seq.default(., from = . - 5, to = . + 5, by = 1) : 
  too many arguments

你可以看到它在这里做了什么,将.引用到第一个参数,但是它还有我的三个显式参数来处理,并且错误结果。

直到我想在.参数中使用from进行算术运算之前,它一直运行良好。

有没有办法做我想做的事情,或者某些功能与%>%不完全兼容只是生活中的事实?

1 个答案:

答案 0 :(得分:10)

您可以阻止插入%>%。通过用括号括起来围绕右侧的第一个参数:

10 %>% { seq(from = .-5, to = .+5) }
## [1]  5  6  7  8  9 10 11 12 13 14 15