Skip to content

Commit 96592ff

Browse files
Merge pull request #422 from lindsaycarr/brokenFormulas
be able to use formulas and data lists
2 parents 1c5cfe2 + 91c9bb5 commit 96592ff

File tree

5 files changed

+39
-32
lines changed

5 files changed

+39
-32
lines changed

R/axis.R

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ axis <- function(object, ...) {
6464
override("graphics", "axis", object, ...)
6565
}
6666

67-
#' @importFrom utils head
68-
axis.gsplot <- function(object, ..., n.minor=0, tcl.minor=0.15, reverse=NULL, append=FALSE) {
67+
axis.gsplot <- function(object, ..., n.minor=0, tcl.minor=0.15, reverse=NULL) {
6968

7069
fun.name <- "axis"
7170

@@ -79,25 +78,9 @@ axis.gsplot <- function(object, ..., n.minor=0, tcl.minor=0.15, reverse=NULL, ap
7978

8079
for(side in sides){
8180
# append the side and give it defaults if it doesn't exist
82-
8381
object <- modify_side(object, args = list(), side=side)
84-
which.axis <- which(names(object[[as.side_name(side)]])== 'axis')
85-
if (append){
86-
last.axis <- tail(which.axis, 1) # get the last one
87-
object[[as.side_name(side)]] <- append(object[[as.side_name(side)]],
88-
list('axis' = set_args('axis', side=side, package='graphics')),
89-
after = last.axis)
90-
object[[as.side_name(side)]][[last.axis+1]] <- append_replace(object[[as.side_name(side)]][[last.axis+1]], user_args[[fun.name]])
91-
} else {
92-
# remove
93-
if (length(which.axis) > 1){
94-
# remove all axis functions other than the first one
95-
object[[as.side_name(side)]] <- object[[as.side_name(side)]][-which.axis[!which.axis %in% head(which.axis, 1)]]
96-
}
97-
object[[as.side_name(side)]][['axis']] <- append_replace(object[[as.side_name(side)]][['axis']], user_args[[fun.name]])
98-
}
9982
object[[as.side_name(side)]][['usr.axes']] <- TRUE
100-
83+
object[[as.side_name(side)]][['axis']] <- append_replace(object[[as.side_name(side)]][['axis']], user_args[[fun.name]])
10184
if (!is.null(reverse)){
10285
object[[as.side_name(side)]][['reverse']] <- reverse
10386
}
@@ -108,6 +91,8 @@ axis.gsplot <- function(object, ..., n.minor=0, tcl.minor=0.15, reverse=NULL, ap
10891
}
10992

11093
draw_axis <- function(object, side.name){
94+
95+
11196
# method isn't made for multiple axis calls
11297
which.axis <- which(names(object[[side.name]]) == 'axis')
11398
if (length(which.axis) > 1){
@@ -117,9 +102,10 @@ draw_axis <- function(object, side.name){
117102
draw_axis(tmp, side.name)
118103
}
119104
}
120-
axis.args <- object[[side.name]][['axis']]
121-
side.lim <- object[[side.name]][['lim']]
122105

106+
master axis.args <- object[[side.name]][['axis']]
107+
side.lim <- object[[side.name]][['lim']]
108+
123109
axis.args$at <- get_axTicks(object, as.side(side.name))
124110

125111
# need a cleaner way to extract the non-axis args (such as n.minor and tcl.minor)
@@ -140,7 +126,9 @@ draw_axis <- function(object, side.name){
140126
axis.args$n.minor <- NULL
141127
axis.args$tcl.minor <- NULL
142128

143-
do.call('Axis', axis.args)
129+
do.call('Axis', axis.args)
130+
131+
144132

145133
# Minor axis:
146134

R/function_args.R

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,15 @@ function_args <- function(package, name, object, ..., use.default=paste0(name,'.
1414
params <- list(...)
1515

1616
if (!missing(object)) {
17-
if (!is.null(names(object)))
18-
params <- append(object, params)
19-
else {
20-
params <- append(list(object), params)
21-
}
17+
params <- append_params(object, params)
2218
} else {
23-
object = c() # replace w/ empty
19+
object=c()
2420
}
2521

2622
if (length(params) == 0)
2723
return(list())
2824

25+
2926
# // is there a method for this class?
3027
defFun <- getS3method(name,class(object),optional=TRUE) # will be NULL when object is missing
3128
if (is.null(defFun)){
@@ -65,4 +62,20 @@ function_args <- function(package, name, object, ..., use.default=paste0(name,'.
6562
return(params)
6663
}
6764

65+
append_params <- function(object, params){
66+
UseMethod('append_params')
67+
}
68+
69+
append_params.NULL <- function(object, params){
70+
params
71+
}
72+
73+
append_params.list <- function(object, params){
74+
append(object, params)
75+
}
76+
77+
append_params.default <- function(object, params){
78+
append(list(object), params)
79+
}
80+
6881
user_function_args <- function_args

R/utils-list.R

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ 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+
if(is.list(v.vals)){
38+
v.vals <- strip_pts(v.vals, param)
39+
}
3740
out <- append_keepTZ(out, v.vals, tz=attr(v.vals, 'tzone'))
3841
all.na <- all(is.na(v.vals))
3942
out.class <- ifelse(!all.na, class(v.vals), out.class)
@@ -43,7 +46,7 @@ strip_pts <- function(list, param){
4346
} else {
4447
if (any(sapply(list, is.list))){
4548
u.list <- unname_c(list[sapply(list, is.list)])
46-
if(v %in% names(u.list)) {
49+
if(v %in% names(u.list) && !inherits(u.list[[v]], c('function','formula'))) {
4750
v.vals <- u.list[[v]]
4851
out <- append_keepTZ(out, v.vals, tz=attr(v.vals, 'tzone'))
4952
all.na <- all(is.na(v.vals))

tests/testthat/tests-axis.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ test_that("axis gsplot",{
1818
"view.1.2", "global", "metadata")))
1919

2020
gs <- gsplot() %>%
21-
lines(1:5, c(1,10,100,1000,10000), log="y", axes=FALSE) %>%
22-
axis(side=c(2,4), labels=FALSE, n.minor=4)
21+
lines(1:5, c(1,10,100,1000,10000), log="y", axes=FALSE) %>%
22+
axis(side=c(2,4), labels=FALSE, n.minor=4)
2323

2424
expect_false(gs$side.1$axes)
2525
expect_false(gs$side.2$axes)

tests/testthat/tests-points.R

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ test_that("graphics examples work", {
1010
lx <- seq(1, 5, length = 41)
1111
xy = xy.coords(x=10^lx,y=exp(-.5*lx^2))
1212
plot.xy(xy, type='p')
13-
13+
14+
plot(1,3)
15+
points(data.frame(1,2), col='red')
16+
1417
})
1518

1619
context("points arguments")

0 commit comments

Comments
 (0)