@@ -130,12 +130,26 @@ layer <- function(geom = NULL, stat = NULL,
130
130
131
131
# Split up params between aesthetics, geom, and stat
132
132
params <- rename_aes(params )
133
- aes_params <- params [intersect(names(params ), union(geom $ aesthetics(), position $ aesthetics()))]
134
- geom_params <- params [intersect(names(params ), geom $ parameters(TRUE ))]
135
- stat_params <- params [intersect(names(params ), stat $ parameters(TRUE ))]
133
+ aes_params <- params [
134
+ intersect(names(params ), union(geom $ aesthetics(), position $ aesthetics()))
135
+ ]
136
+
137
+ # make sure all required parameters have a default value `NULL`
138
+ geom_parameters <- geom $ parameters(TRUE )
139
+ geom_params <- vector(" list" , length(geom_parameters ))
140
+ names(geom_params ) <- geom_parameters
141
+ geom_params [intersect(names(params ), geom_parameters )] <- params [
142
+ intersect(names(params ), geom_parameters )
143
+ ]
144
+ stat_parameters <- stat $ parameters(TRUE )
145
+ stat_params <- vector(" list" , length(stat_parameters ))
146
+ names(stat_params ) <- stat_parameters
147
+ stat_params [intersect(names(params ), stat_parameters )] <- params [
148
+ intersect(names(params ), stat_parameters )
149
+ ]
136
150
137
151
ignore <- c(" key_glyph" , " name" , " layout" )
138
- all <- c(geom $ parameters( TRUE ), stat $ parameters( TRUE ) , geom $ aesthetics(), position $ aesthetics(), ignore )
152
+ all <- c(geom_parameters , stat_parameters , geom $ aesthetics(), position $ aesthetics(), ignore )
139
153
140
154
# Take care of plain patterns provided as aesthetic
141
155
pattern <- vapply(aes_params , is_pattern , logical (1 ))
0 commit comments