@@ -34,28 +34,40 @@ strip_pts <- function(list, param){
3434 for (v in param ){
3535 if (v %in% names(list ) && ! inherits(list [[v ]], c(' function' ,' formula' ))) {
3636 v.vals <- list [[v ]]
37- out <- append(out , v.vals )
38- out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
37+ out <- append_keepTZ(out , v.vals , tz = attr(v.vals , ' tzone' ))
38+ all.na <- all(is.na(v.vals ))
39+ out.class <- ifelse(! all.na , class(v.vals ), out.class )
40+ if (all.na ){
41+ class(out ) <- out.class
42+ }
3943 } else {
4044 if (any(sapply(list , is.list ))){
4145 u.list <- unname_c(list [sapply(list , is.list )])
4246 if (v %in% names(u.list )) {
4347 v.vals <- u.list [[v ]]
44- out <- append(out , v.vals )
45- out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
48+ out <- append_keepTZ(out , v.vals , tz = attr(v.vals , ' tzone' ))
49+ all.na <- all(is.na(v.vals ))
50+ out.class <- ifelse(! all.na , class(v.vals ), out.class )
51+ if (all.na ){
52+ class(out ) <- out.class
53+ }
4654 } else if (any(sapply(u.list , function (x ) any(names(x ) %in% v )))) {
4755 v.vals <- u.list [[which(sapply(u.list , function (x ) any(names(x ) %in% v )))]][[v ]]
48- out <- append(out , v.vals )
49- out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
56+ out <- append_keepTZ(out , v.vals , tz = attr(v.vals , ' tzone' ))
57+ all.na <- all(is.na(v.vals ))
58+ out.class <- ifelse(! all.na , class(v.vals ), out.class )
59+ if (all.na ){
60+ class(out ) <- out.class
61+ }
5062 } else {
51- out <- append (out , NA )
63+ out <- append_keepTZ (out , NA , tz = attr( out , " tzone " ) )
5264 }
5365 } else
54- out <- append (out , NA )
66+ out <- append_keepTZ (out , NA , tz = attr( out , " tzone " ) )
5567 }
5668
5769 }
58- class(out ) <- out.class
70+ # class(out) <- out.class
5971 return (out )
6072}
6173
@@ -76,3 +88,11 @@ strip_pts2 <- function(data, param) {
7688 return (out )
7789}
7890
91+ # append without losing timezones for the case where
92+ # append.vals is POSIX and base.vals is NULL
93+ # also handles adding NA to POSIXct vals
94+ append_keepTZ <- function (base.vals , append.vals , tz = NULL ){
95+ vals <- append(base.vals , append.vals )
96+ attr(vals ," tzone" ) <- tz
97+ return (vals )
98+ }
0 commit comments