【问题标题】:Pipe operator %>% error with seq() function in RR中的seq()函数的管道运算符%>%错误
【发布时间】:2018-05-25 13:44:11
【问题描述】:

我是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 &lt;- 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 参数中使用 . 进行一些算术运算之前,它都运行良好。

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

【问题讨论】:

    标签: r dplyr pipe


    【解决方案1】:

    您可以阻止 %&gt;% 插入 .通过用大括号将右侧括起来进入第一个参数:

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

    【讨论】:

    • 天哪,就这么简单吗?!谢谢你:)
    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2021-08-23
    • 2019-07-15
    相关资源
    最近更新 更多