Skip to content

Commit 745a3b0

Browse files
Merge pull request #413 from lindsaycarr/master
append without losing timezones in strip_pts
2 parents 982628f + 6ba68c5 commit 745a3b0

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

R/utils-list.R

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

R/utils-side.R

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,10 @@ set_side_lim <- function(args, side, side.num){
208208
if(any(free.lim)){
209209
side.vals <- strip_pts(args, include)
210210
if (any(!is.na(side.vals))){
211-
data.range <- range(c(side.vals[is.finite(side.vals)], side$lim), na.rm = TRUE)
211+
data.range <- range(append_keepTZ(base.vals=side.vals[is.finite(side.vals)],
212+
append.vals=side$lim,
213+
tz=attr(side.vals, 'tzone')),
214+
na.rm = TRUE)
212215
data.range[!free.lim] <- side$lim[!free.lim]
213216
side$lim <- data.range
214217
}

0 commit comments

Comments
 (0)