r语言 - 是否可以将变量名称动态分配给 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的名字,但我无法弄清楚。

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

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

或者可以使用setNamesbase R而不是set_names更改最后一步

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

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

作业括在大括号中并使用 T 形管似乎有效:

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

最新更新