@@ -34,18 +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(out , v.vals )
37+ # append to out without losing timezones when it is a date/POSIX
38+ if (is.null(out )){
39+ out <- v.vals
40+ } else {
41+ out <- append(out , v.vals )
42+ }
3843 out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
3944 } else {
4045 if (any(sapply(list , is.list ))){
4146 u.list <- unname_c(list [sapply(list , is.list )])
4247 if (v %in% names(u.list )) {
4348 v.vals <- u.list [[v ]]
44- out <- append (out , v.vals )
49+ out <- append_keepclass (out , v.vals )
4550 out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
4651 } else if (any(sapply(u.list , function (x ) any(names(x ) %in% v )))) {
4752 v.vals <- u.list [[which(sapply(u.list , function (x ) any(names(x ) %in% v )))]][[v ]]
48- out <- append(out , v.vals )
53+ # append to out without losing timezones when it is a date/POSIX
54+ out <- append_keepclass(out , v.vals )
4955 out.class <- ifelse(! all(is.na(v.vals )), class(v.vals ), out.class )
5056 } else {
5157 out <- append(out , NA )
@@ -76,3 +82,13 @@ strip_pts2 <- function(data, param) {
7682 return (out )
7783}
7884
85+ # append without losing timezones for the case where
86+ # append.vals is POSIX and base.vals is NULL
87+ append_keepclass <- function (base.vals , append.vals ){
88+ if (is.null(base.vals )){
89+ vals <- append.vals
90+ } else {
91+ vals <- append(base.vals , append.vals )
92+ }
93+ return (vals )
94+ }
0 commit comments