Как получить простое числовое значение из именованного числового вектора в R? - PullRequest
5 голосов
/ 20 января 2012

Я использую R для вычисления некоторых основных статистических результатов.Я использую функцию quantile () для вычисления квантилей в столбце фрейма данных следующим образом.

> quantile(foobars[,1])
     0%     25%     50%     75%    100% 
 189000  194975  219500  239950 1000000 

Я хочу иметь возможность индивидуального доступа к вычисленным квантилям.Тем не менее, я не могу понять, как это сделать.Когда я проверяю класс возвращаемого результата, это 1-мерное число.

Я пробовал это:

> q <- quantile(foobars[,1])
> q[3]
   50% 
219500

, который, кажется, возвращает кортеж (уровень квантили + число).Меня интересует только число (в данном случае 219500.

Как мне получить доступ только к числу в простой (числовой) переменной?

1 Ответ

16 голосов
/ 20 января 2012

Вы путаете напечатанное представление числового значения с фактическим значением. Что касается 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...