Используйте int64 nanotimes в качестве dimnames массивов в R - PullRequest
0 голосов
/ 30 мая 2020

У меня есть несколько прекрасных наноразмеров:

> mynames
[1] "2020-04-15T00:29:00.000000000+00:00" "2020-04-15T00:33:00.000000000+00:00"

Которые я бы хотел добавить в качестве dimnames в свой массив:

> a
     [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA

Однако они, кажется, преобразованы в свернутые строки:

> dimnames(a)[1] <- list(values=mynames)
> a
                      [,1] [,2]
1.39309697650764e-202   NA   NA
1.39315136717363e-202   NA   NA

> dimnames(a)
[[1]]
[1] "1.39309697650764e-202" "1.39315136717363e-202"

Как сохранить присвоенное имя dimname как nanotime / integer64s? Или, если они вынуждены использовать символы как тусклые имена, как я могу хотя бы уберечь их от строк неправильных чисел?

Вы можете видеть, например, что они не возвращаются к подходящему времени:

> nanotime(dimnames(a)[1][[1]][1])
Error in RcppCCTZ::parseDouble(x, fmt = format, tz = tz) : 
  Parse error on 1.39309697650764e-202

1 Ответ

2 голосов
/ 30 мая 2020

В документации из dimnames указано, что value приводится к character. Чтобы выполнить все принудительное принуждение назад и от к nanotime, которое основано на integer64, вы можете сначала принудить свой nanotime к integer64, а затем к character. Тогда работает обратное принуждение:

library(nanotime)

mynames <- c(nanotime("2020-04-15T00:29:00.000000000+00:00"),
             nanotime("2020-04-15T00:33:00.000000000+00:00"))

a <- array(NA, dim = c(2, 2))
# nanotime -> integer64 -> charachter
dimnames(a)[1] <- list(values = as.character(as.integer64(mynames)))

# character -> integer64 -> nanotime
nanotime(as.integer64(dimnames(a)[1][[1]][1]))
[1] "2020-04-15T00:29:00.000000000+00:00"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...