是否可以在magrittr管道中为矢量动态分配变量名?

时间:2019-03-30 18:59:53

标签: r list renaming magrittr

R中的某些函数(例如quantile)丢失了我想要保留的向量名称。假设我建立了以下管道:

> dist <- c(0, 1, 2, 3)
> qnts <- c(lower = 0.25, upper = 0.75)
> qnts %>% quantile(dist, .)
#  25%. 75%
# 0.75 2.25
> qnts %>% quantile(dist, ., names = FALSE)
# [1] 0.75 2.25

在这两种情况下,分位数都会丢失qnts向量中的名称。

毫不奇怪,管道内的分配不起作用:

> qnts %>% quantile(dist, .) %>% names(.) <- c("upper", "lower")
# Error in qnts %>% quantile(dist, ., names = FALSE) %>% naes(.) <- c("upper",  :
#  could not find function "%>%<-"

我也不能使用assign-因为names(.)不是变量-或重命名-在这种情况下,我可以使用rename(., c("25%" = "lower", "75%" = "upper")),但是在我的用例中,分位数动态变化。

必须有某种方法可以智能地恢复qnts的名称,但我无法弄清楚。

2 个答案:

答案 0 :(得分:4)

使用magrittrset_names会更合适(对于Alias`names<-`

library(magrittr)
qnts %>%
   quantile(dist, .) %>% 
   set_names(c("upper", "lower"))
#  upper lower 
# 0.75  2.25 

或者可以将setNames中的base R而不是set_names更改为最后一步

另一种选择是使用names<-,但不易理解

qnts %>%
   quantile(dist, .) %>%
   `names<-`(c("upper", "lower"))

答案 1 :(得分:1)

用大括号包裹作业并使用三通管似乎很有效:

qnts %>% quantile(dist, .) %T>% {names(.) <- c("upper", "lower")}