【问题标题】:subsetting within magrittr pipelines without affecting the overall objectmagrittr 管道内的子集化而不影响整个对象
【发布时间】:2020-05-19 10:11:19
【问题描述】:

目前 magrittr 管道的工作方式无法混合矢量级和表级操作。例如str_sub() 只接受一个向量,而mutate() 只接受一个表格。

如果您想在同一个管道中同时使用两者,唯一的选择是拆分管道或嵌套,这两种方法都会破坏管道:

##Multiple short operations and assignments:

iris$Species %<>% str_sub(.,1,-3) 
iris %<>% mutate(., compliments=str_c("pretty"," ",Species))


##Multiple layers of nested functions

iris%>%mutate(., 
  compliments=str_c(
    "pretty",
    " ",
    str_sub(Species,1,-3)
  )
)

我想要做的事情类似于下面的(非工作)示例。我发现的最接近的近似值是对mutate 的大量多余调用:

iris %>% 
str_sub(.$Species,1,-3) %>%   
mutate(., compliments=str_c("pretty"," ",Species))

【问题讨论】:

  • 您共享的代码均无效。我不清楚你想做什么。你能解释一下吗?
  • Species 是小写的。我修正了错字并更改了示例管道,因此他们所做的更改更加明显。我要做的是第一个例子。

标签: r pipe magrittr


【解决方案1】:

您需要记住您错过了管道中函数的第一个参数,因此您的第一个示例应如下所示:

library(magrittr)
library(dplyr)

iris %<>% mutate(Species = str_sub(Species, 1, -3), 
                 compliments = str_c("pretty", " ", Species))

head(iris)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species compliments
#> 1          5.1         3.5          1.4         0.2    seto pretty seto
#> 2          4.9         3.0          1.4         0.2    seto pretty seto
#> 3          4.7         3.2          1.3         0.2    seto pretty seto
#> 4          4.6         3.1          1.5         0.2    seto pretty seto
#> 5          5.0         3.6          1.4         0.2    seto pretty seto
#> 6          5.4         3.9          1.7         0.4    seto pretty seto

(另外,你忘了大写Species!)

【讨论】:

  • Magrittr 还允许您在第一个参数中加上点,因为我们这些迂腐的人总是希望明确定义第一个参数而不是完全不可见。这可能是自动识别点运算符的意外副作用,但我从未遇到过它不起作用的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
相关资源
最近更新 更多