Подстановка "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 имеет длину один (поэтому обе интерпретации будут иметь одинаковый результат).

Другие вопросы по тегам