Подстановка "xts" (матрицы) с NA
Рассмотрим следующие объекты xts, x,y:
x=xts(matrix(1:12, ncol=3), Sys.Date()+1:4 )
x[1,]=NA
y=x
Поскольку все элементы положительны:
> coredata(x)[x>0]
[1] NA 2 3 4 NA 6 7 8 NA 10 11 12
> coredata(y)[T]
[1] NA 2 3 4 NA 6 7 8 NA 10 11 12
Для дальнейшего подтверждения сходства мы можем проверить:
> str(coredata(x)[x>0])
int [1:12] NA 2 3 4 NA 6 7 8 NA 10 ...
> class(coredata(x)[x>0])
[1] "integer"
> str(coredata(y)[T])
int [1:12] NA 2 3 4 NA 6 7 8 NA 10 ...
> class(coredata(y)[T])
[1] "integer"
Во всяком случае, когда дело доходит до назначения, есть другое поведение
> coredata(x)[x>0]=0
> coredata(y)[T]=0
> x;y
[,1] [,2] [,3]
2014-01-15 NA NA NA
2014-01-16 0 0 0
2014-01-17 0 0 0
2014-01-18 0 0 0
[,1] [,2] [,3]
2014-01-15 0 0 0
2014-01-16 0 0 0
2014-01-17 0 0 0
2014-01-18 0 0 0
Можете ли вы объяснить, почему существует другое поведение?
1 ответ
От help("[")
:
НС в индексации
При извлечении числовой, логический или символьный индекс NA выбирает неизвестный элемент и, таким образом, возвращает NA в соответствующем элементе логического, целочисленного, числового, комплексного или символьного результата и NULL для списка. (Возвращает 00 для необработанного результата.)
При замене (то есть с использованием индексации по lhs присвоения) NA не выбирает ни одного элемента для замены. Поскольку существует двусмысленность относительно того, следует ли использовать элемент rhs или нет, это допустимо только в том случае, если значение rhs имеет длину один (поэтому обе интерпретации будут иметь одинаковый результат).