@@ -34,24 +34,24 @@ 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_keepclass (out , v.vals )
37+ out <- append_keepTZ (out , v.vals , tz = attr( v.vals , ' tzone ' ) )
3838 out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
3939 } else {
4040 if (any(sapply(list , is.list ))){
4141 u.list <- unname_c(list [sapply(list , is.list )])
4242 if (v %in% names(u.list )) {
4343 v.vals <- u.list [[v ]]
44- out <- append_keepclass (out , v.vals )
44+ out <- append_keepTZ (out , v.vals , tz = attr( v.vals , ' tzone ' ) )
4545 out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
4646 } else if (any(sapply(u.list , function (x ) any(names(x ) %in% v )))) {
4747 v.vals <- u.list [[which(sapply(u.list , function (x ) any(names(x ) %in% v )))]][[v ]]
48- out <- append_keepclass (out , v.vals )
48+ out <- append_keepTZ (out , v.vals , tz = attr( v.vals , ' tzone ' ) )
4949 out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
5050 } else {
51- out <- append (out , NA )
51+ out <- append_keepTZ (out , NA , tz = attr( out , " tzone " ) )
5252 }
5353 } else
54- out <- append (out , NA )
54+ out <- append_keepTZ (out , NA , tz = attr( out , " tzone " ) )
5555 }
5656
5757 }
@@ -78,11 +78,9 @@ strip_pts2 <- function(data, param) {
7878
7979# append without losing timezones for the case where
8080# append.vals is POSIX and base.vals is NULL
81- append_keepclass <- function (base.vals , append.vals ){
82- if (is.null(base.vals )){
83- vals <- append.vals
84- } else {
85- vals <- append(base.vals , append.vals )
86- }
81+ # also handles adding NA to POSIXct vals
82+ append_keepTZ <- function (base.vals , append.vals , tz = NULL ){
83+ vals <- append(base.vals , append.vals )
84+ attr(vals ," tzone" ) <- tz
8785 return (vals )
8886}
0 commit comments