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
的名字,但我无法弄清楚。
对于magrittr
,set_names
会更合适(这是`names<-`
的Alias
(
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"))
作业括在大括号中并使用 T 形管似乎有效:
qnts %>% quantile(dist, .) %T>% {names(.) <- c("upper", "lower")}