R: Почему объект xts становится объектом зоопарка после вызова transform()?

transform() удаляет квалификатор класса "xts" из моего объекта xts:

> class(myxts)
[1] "xts" "zoo"
> myxts = transform(myxts, ABC = 1)
> class(myxts)
[1] "zoo"

Почему это?


person Robert Kubrick    schedule 17.02.2012    source источник


Ответы (1)


Для transform нет метода xts, поэтому отправляется метод zoo. Метод зоопарка явно создает новый объект зоопарка.

> zoo:::transform.zoo
function (`_data`, ...) 
{
    if (is.null(dim(coredata(`_data`)))) 
        warning("transform() is only useful for matrix-based zoo series")
    zoo(transform.data.frame(data.frame(coredata(`_data`)), ...), 
        index(`_data`), attr(`_data`, "frequency"))
}
<environment: namespace:zoo>

Вы можете просто обернуть свои вызовы transform в as.xts, или ваш пример можно записать как myxts$ABC <- 1.

person Joshua Ulrich    schedule 17.02.2012
comment
Я пробовал myxts = as.xts(transform(myxts,...)) но получаю эту ошибку, когда пытаюсь получить доступ к myxts по индексу даты: Ошибка в функции (год = 1970, месяц = ​​1, день = 1 , час = 0, мин = 0, : неиспользуемый(е) аргумент(ы) (tz1 = , tz2 = EST, tz3 = EDT) - person Robert Kubrick; 28.02.2012
comment
@RobertKubrick: мне почти невозможно догадаться, что вызывает эту ошибку. Воспроизводимый пример действительно поможет. - person Joshua Ulrich; 28.02.2012
comment
Я собираюсь опубликовать это как отдельный вопрос. - person Robert Kubrick; 28.02.2012