管道运算符 >% 错误与 R 中的 seq() 函数



我是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参数中使用.进行一些算术。

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

您可以防止%>%插入 . 到第一个参数中,方法是用大括号括起来的右侧:

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

最新更新