Вопрос

Пусть скажу у меня этот зоопарк вектор

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 

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

ваше здоровье

Это было полезно?

Решение

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

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

> 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top