Вы путаете напечатанное представление числового значения с фактическим значением. Что касается R, q
содержит именованный числовой вектор:
> dat <- rnorm(100)
> q <- quantile(dat)
> q
0% 25% 50% 75% 100%
-2.2853903 -0.5327520 -0.1177865 0.5182007 2.4825565
> str(q)
Named num [1:5] -2.285 -0.533 -0.118 0.518 2.483
- attr(*, "names")= chr [1:5] "0%" "25%" "50%" "75%" ...
Все «именованные» биты означают, что вектор имеет прикрепленный атрибут "names"
, содержащий (в данном случае) квантильные метки. R печатает их для именованного вектора, поскольку они считаются полезными при выводе на печать, если они присутствуют. Но они никоим образом не изменяют тот факт, что это числовой вектор. Вы можете использовать их в вычислениях, как если бы они не имели атрибута "names"
:
> q[3] + 10
50%
9.882214
Если имена вас беспокоят, существует функция unname()
для их удаления:
> q2 <- unname(q)
> q2
[1] -2.2853903 -0.5327520 -0.1177865 0.5182007 2.4825565
Для полноты я, вероятно, должен добавить, что вы можете извлечь "names"
с помощью функции names()
, которая также имеет версию назначения ('names<-'()
). Таким образом, другой способ удалить имена из вектора - это присвоить имена NULL
:
> q3 <- q
> names(q3)
[1] "0%" "25%" "50%" "75%" "100%"
> names(q3) <- NULL
> names(q3)
NULL