Намного легче увидеть, уменьшим ли мы пример. Приведенный ниже код приводит второй аргумент к объекту класса zoo
, давая zoo(as.character(11:13), 1:3)
, а затем он приводит класс индекса второго аргумента (integer
) к тому же классу индекса, что и первый аргумент (Date
) , Предупреждающее сообщение предупреждает, что используются разные классы индекса.
cbind.zoo
имеет специальную обработку для обработки простых векторов, но только если они имеют тот же тип, что и основные данные объекта зоопарка. Если бы в качестве базовых данных первого аргумента использовался простой вектор того же типа , то есть оба numeric
, он бы работал как хотелось бы. Закомментированная строка с пометкой correct
показывает это.
library(zoo)
dates.zoo <- zoo(data.frame(val= 1:3), as.Date('2019-01-03') + 0:2)
# cbind(dates.zoo, ti=11:13) # correct
cbind(dates.zoo, ti=as.character(11:13)) # incorrect
, что дает:
val ti
1970-01-02 <NA> 11
1970-01-03 <NA> 12
1970-01-04 <NA> 13
2019-01-03 1 <NA>
2019-01-04 2 <NA>
2019-01-05 3 <NA>
Warning message:
In merge.zoo(..., all = all, fill = fill, suffixes = suffixes, retclass = "zoo", :
Index vectors are of different classes: Date integer
Также обратите внимание:
as.Date(1:3)
## [1] "1970-01-02" "1970-01-03" "1970-01-04"