Заменить отсутствующие данные на NA в R - PullRequest
0 голосов
/ 21 января 2019

Я строю временной ряд (xts) из нескольких наблюдений, хранящихся в списке объектов xts. Извлеченные данные иногда отсутствуют, R сообщают об ошибке:

"Error in NextMethod(.Generic) : replacement has length zero"

Я бы хотел, чтобы R сообщил о НС вместо этого. Я думаю, что ответ лежит в tryCatch (), но я не могу его прибить.

# Here is a MCVE:
Contract <- list(xts(1:12,order.by=Sys.Date()-1:12),
                 xts(1:10,order.by=Sys.Date()-1:10),
                 xts(1:8,order.by=Sys.Date()-2:9))

Vol <- xts(matrix(0, 12,3, byrow = FALSE),order.by=Sys.Date()-1:12)
for (A in 1:12){for (B in 1:3){
       Vol[A,B] <- Contract[[B]][index(Vol)[A]]
     }}
Vol

Любая помощь будет с благодарностью. (Также, если у кого-то есть умная идея векторизовать двойной цикл ...)

1 Ответ

0 голосов
/ 21 января 2019

Мы могли бы проверить, если преобразовать сгенерированное наблюдение в числовые значения numeric(0).

Вот решение с sapply(), которое создает матрицу из вектора всех дат.

all.dates <- Sys.Date() - 1:12

MX <- t(sapply(seq_along(all.dates), function(x) 
  sapply(seq_along(Contract), function(y) {
    obs <- Contract[[y]][all.dates[x]]
    if (identical(as.numeric(obs), numeric(0)))  # reporting NA
      xts(NA, all.dates[x])
    else 
      obs
  }
  )))

Vol <- xts(MX, order.by=all.dates)
rm(MX)  # clean up

Результат

> Vol
           [,1] [,2] [,3]
2019-01-09   12   NA   NA
2019-01-10   11   NA   NA
2019-01-11   10   10   NA
2019-01-12    9    9    8
2019-01-13    8    8    7
2019-01-14    7    7    6
2019-01-15    6    6    5
2019-01-16    5    5    4
2019-01-17    4    4    3
2019-01-18    3    3    2
2019-01-19    2    2    1
2019-01-20    1    1   NA

Не могли бы вы проверить, ожидаете ли вы этого результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...