anytime
автор здесь: это стандартное поведение R и Rcpp и передача-SEXP
: вы не можете защитить передаваемый SEXP
от изменения.
Представление, которое anytime
Это означает, что вы запрашиваете преобразование ввода в POSIXct
, как это делает anytime
: из char, из int, из factor, из чего угодно.POSIXct
действительно - это числовое значение (плюс атрибут класса S3), это то, что вы получаете.
Если вы этого не хотите (в отличие от дизайна * 1016)*) вы можете делать то, что показывали @Moody_Mudskipper и @PKumar: использовали временное выражение (или переменную).
(я также думаю, что пример data.table
немного несправедлив, как data.table
- как и Rcpp
- очень явно относится к получению ссылок, где это возможно. Поэтому, конечно, он ссылается на исходную переменную. Существуют идиомы для глубокого копирования, если они вам нужны.)
Наконец, очевидный трюк заключается в том, чтобыиспользуйте format
, если вы просто хотите другое отображение:
R> d <- data.frame(t_num=1529734500)
R> d[1, "posixct"] <- format(anytime::anytime(d[1, "t_num"]))
R> d
t_num posixct
1 1529734500 2018-06-23 01:15:00
R>
Это, конечно же, будет работать в data.table
, поскольку строковое представление является изменением типа.То же самое для IDate
/ ITime
.
Редактировать: И версия для разработки в репозитории Github имеет функциональность для сохранения входящего аргумента с июня 2017 года. Итак, следующая версия CRAN,всякий раз, когда я буду толкать его, он будет тоже.