Skip to content

Commit aad7fea

Browse files
committed
add auto-converter for POSIXct
1 parent 43a4269 commit aad7fea

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

R/auto_convert.R

+12
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ ee[["logical___factor"]] =
1414
function(value, type, levels) { factor(value, levels = union(levels, value), ordered = FALSE) }
1515
ee[["logical___ordered"]] =
1616
function(value, type, levels) { if (all(value %in% c(NA_character_, levels))) factor(value, levels = levels, ordered = TRUE) else NULL }
17+
ee[["logical___POSIXct"]] =
18+
function(value, type, levels) { if (allMissing(value)) .POSIXct(value, tz = "") else value }
1719

1820
## from: integer
1921
ee[["integer___logical"]] =
@@ -26,6 +28,8 @@ ee[["integer___factor"]] =
2628
ee[["logical___factor"]]
2729
ee[["integer___ordered"]] =
2830
ee[["logical___ordered"]]
31+
ee[["integer___POSIXct"]] =
32+
ee[["logical___POSIXct"]]
2933

3034
## from: numeric
3135
ee[["numeric___logical"]] =
@@ -38,6 +42,8 @@ ee[["numeric___factor"]] =
3842
ee[["logical___factor"]]
3943
ee[["numeric___ordered"]] =
4044
ee[["logical___ordered"]]
45+
ee[["numeric___POSIXct"]] =
46+
ee[["logical___POSIXct"]]
4147

4248
## from: character
4349
ee[["character___logical"]] =
@@ -50,6 +56,8 @@ ee[["character___factor"]] =
5056
ee[["logical___factor"]]
5157
ee[["character___ordered"]] =
5258
ee[["logical___ordered"]]
59+
ee[["character___POSIXct"]] =
60+
function(value, type, levels) { x = try(as.POSIXct(value), silent = TRUE); if (inherits(x, "try-error")) value else x }
5361

5462
## from: factor
5563
ee[["factor___logical"]] =
@@ -60,6 +68,8 @@ ee[["factor___factor"]] =
6068
function(value, type, levels) { factor(value, levels = union(levels, levels(value)), ordered = FALSE) }
6169
ee[["factor___ordered"]] =
6270
function(value, type, levels) { if (all(levels(value) %in% levels)) factor(value, levels = levels, ordered = TRUE) else NULL }
71+
ee[["factor___POSIXct"]] =
72+
ee[["character___POSIXct"]]
6373

6474
## from: ordered
6575
ee[["ordered___character"]] =
@@ -68,6 +78,8 @@ ee[["ordered___factor"]] =
6878
ee[["factor___factor"]]
6979
ee[["ordered___ordered"]] =
7080
ee[["ordered___ordered"]]
81+
ee[["ordered___POSIXct"]] =
82+
ee[["character___POSIXct"]]
7183

7284
rm(ee)
7385
# nolint end

tests/testthat/test_auto_convert.R

+32
Original file line numberDiff line numberDiff line change
@@ -206,3 +206,35 @@ test_that("ordered", {
206206
ordered(c("1", NA, "0"), levels = c("1", "0"))
207207
)
208208
})
209+
210+
test_that("POSIXct", {
211+
expect_identical(
212+
auto_convert(NA, "x", "POSIXct", character()),
213+
.POSIXct(NA, "")
214+
)
215+
216+
expect_identical(
217+
auto_convert(NA_integer_, "x", "POSIXct", character()),
218+
.POSIXct(NA, "")
219+
)
220+
221+
expect_identical(
222+
auto_convert(NA_real_, "x", "POSIXct", character()),
223+
.POSIXct(NA_real_, "")
224+
)
225+
226+
expect_identical(
227+
auto_convert(factor(NA_character_, levels = "a"), "x", "POSIXct", "a"),
228+
.POSIXct(NA, "")
229+
)
230+
231+
expect_identical(
232+
auto_convert(ordered(NA_character_, levels = "a"), "x", "POSIXct", "a"),
233+
.POSIXct(NA, "")
234+
)
235+
236+
expect_identical(
237+
auto_convert("2020-01-20 10:00:00", "x", "POSIXct", character()),
238+
as.POSIXct("2020-01-20 10:00:00", "")
239+
)
240+
})

0 commit comments

Comments
 (0)