是否可以动态地将变量名称分配给 magrittr 管道中的向量?

Is it possible to dynamically assign variable names to a vector in a magrittr pipeline?

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 的名字,但我想不通。

用大括号包裹赋值并使用 T 型管似乎可行:

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

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

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

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

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

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