@@ -141,74 +141,71 @@ r2size <- function(r, scope) {
141141 r2size(var @ r , scope )
142142 },
143143 language = {
144- as.character(r [[1 ]]) | >
145- switch (
146- `+` = ,
147- `-` = ,
148- `/` = ,
149- `*` = ,
150- `^` = ,
151- `%/%` = ,
152- `%%` = {
153- args <- as.list(r )[- 1 ]
154- args <- lapply(args , r2size , scope )
155- if (anyNA(rapply(args , as.list ))) {
156- return (NA_integer_ )
157- }
158- cl <- as.call(c(r [[1 ]], args ))
159- if (all(map_lgl(args , is.atomic ))) {
160- cl <- eval(cl , baseenv())
161- }
162- cl
163- },
164- length = {
165- var <- get0(as.character(r [[2L ]]), scope )
166- if (! inherits(var , Variable )) {
167- stop(" could not resolve size: " , deparse1(r ))
168- }
169- if (var @ rank == 1 ) {
170- return (var @ dims [[1L ]])
171- }
172- len <- reduce(var @ dims , \(d1 , d2 ) call(" *" , d1 , d2 ))
173- r2size(len , scope )
174- },
175- `[` = {
176- # [ only works when paired with dim()
177- if (! is_call(r [[2L ]], quote(dim ))) {
178- return (NA_integer_ )
179- }
180- var <- get0(as.character(r [[2L ]][[2L ]]), scope )
181- if (! inherits(var , Variable )) {
182- stop(" could not resolve size: " , deparse1(r ))
183- }
184- axis <- r [[3 ]]
185- if (! is_wholenumber(axis )) {
186- return (NA_integer_ )
187- }
188- if (axis > var @ rank ) {
189- stop(" insufficient rank of variable in " , deparse1(r ))
190- }
191- var @ dims [[axis ]]
192- },
193- # dim = {
194- #
195- # },
196- nrow = {
197- var <- get0(as.character(r [[2L ]]), scope )
198- if (! inherits(var , Variable )) {
199- stop(" could not resolve size: " , deparse1(r ))
200- }
201- var @ dims [[1 ]]
202- },
203- ncol = {
204- var <- get0(as.character(r [[2L ]]), scope )
205- if (! inherits(var , Variable )) {
206- stop(" could not resolve size: " , deparse1(r ))
207- }
208- var @ dims [[2 ]]
209- },
210- NA_integer_
211- )
144+ op <- as.character(r [[1 ]])
145+
146+ if (op %in% c(" +" , " -" , " /" , " *" , " ^" , " %/%" , " %%" )) {
147+ args <- as.list(r )[- 1 ]
148+ args <- lapply(args , r2size , scope )
149+ if (anyNA(rapply(args , as.list ))) {
150+ return (NA_integer_ )
151+ }
152+ cl <- as.call(c(r [[1 ]], args ))
153+ if (all(map_lgl(args , is.atomic ))) {
154+ cl <- eval(cl , baseenv())
155+ }
156+ return (cl )
157+ }
158+
159+ switch (
160+ op ,
161+ length = {
162+ var <- get0(as.character(r [[2L ]]), scope )
163+ if (! inherits(var , Variable )) {
164+ stop(" could not resolve size: " , deparse1(r ))
165+ }
166+ if (var @ rank == 1 ) {
167+ return (var @ dims [[1L ]])
168+ }
169+ len <- reduce(var @ dims , \(d1 , d2 ) call(" *" , d1 , d2 ))
170+ r2size(len , scope )
171+ },
172+ `[` = {
173+ # [ only works when paired with dim()
174+ if (! is_call(r [[2L ]], quote(dim ))) {
175+ return (NA_integer_ )
176+ }
177+ var <- get0(as.character(r [[2L ]][[2L ]]), scope )
178+ if (! inherits(var , Variable )) {
179+ stop(" could not resolve size: " , deparse1(r ))
180+ }
181+ axis <- r [[3 ]]
182+ if (! is_wholenumber(axis )) {
183+ return (NA_integer_ )
184+ }
185+ if (axis > var @ rank ) {
186+ stop(" insufficient rank of variable in " , deparse1(r ))
187+ }
188+ var @ dims [[axis ]]
189+ },
190+ # dim = {
191+ #
192+ # },
193+ nrow = {
194+ var <- get0(as.character(r [[2L ]]), scope )
195+ if (! inherits(var , Variable )) {
196+ stop(" could not resolve size: " , deparse1(r ))
197+ }
198+ var @ dims [[1 ]]
199+ },
200+ ncol = {
201+ var <- get0(as.character(r [[2L ]]), scope )
202+ if (! inherits(var , Variable )) {
203+ stop(" could not resolve size: " , deparse1(r ))
204+ }
205+ var @ dims [[2 ]]
206+ },
207+ NA_integer_
208+ )
212209 },
213210 NA_integer_
214211 )
0 commit comments