Р: Почему мой вектор неупорядочен? - PullRequest
0 голосов
/ 25 ноября 2010

Допустим, у меня есть этот зоопарк вектор

mine <- zoo(c(rep(0,4),rep(1,4),rep(0,5),rep(1,23),rep(0,4),rep(1,2)),as.chron(seq(1:42)))

И я хочу извлечь несколько элементов в некотором порядке

> mine[14]
01/15/70 
       1 
> mine[5]
01/06/70 
       1 
> mine[41]
02/11/70 
       1 

Это работает! Но сейчас я пытаюсь сделать это по-другому

zz <- c(14, 5, 41)
mine[zz]

01/06/70 01/15/70 02/11/70 
       1        1        1 

Я не знаю, почему я получаю это в другом порядке. Как я могу сохранить порядок, который я хочу, порядок моего списка? Я не против, если это список, вектор, по столбцам или по строкам, но я бы хотел получить его в том порядке, о котором я просил.

ура

1 Ответ

4 голосов
/ 25 ноября 2010

Ответ того, почему zoo делает это, заключается в том, что у него есть метод для функции [ ([.zoo), и он создает новый объект zoo из поднабора значений, который он логически хочет изменить, чтобы ондопустимый объект зоопарка.

Вы можете достичь того, что вы хотите, используя индексы и данные времени с помощью соответствующих функций доступа:

> index(mine)[c(14, 5, 41)]
[1] 01/15/70 01/06/70 02/11/70
> coredata(mine)[c(14, 5, 41)]
[1] 1 1 1

Если вы хотите объединить это в один шаг,напишите свое собственное веселье, чтобы сделать:

myExtract <- function(x, want) {
    out <- coredata(mine)[want]
    names(out) <- index(x)[want]
    out
}

Что дает:

> myExtract(mine, want = c(14, 5, 41))
01/15/70 01/06/70 02/11/70 
       1        1        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...