R-Devel: I am trying to get an attribute of the first argument in a call to a function whose formal arguments consist of dots only and do something, e.g., call 'cbind', based on the attribute f<- function(...) {get first attribute; maybe or maybe not call 'cbind'}
I thought of (ignoring "deparse.level" for the moment) f<-function(...) {x <- attr(list(...)[[1L]], "foo"); if (x=="bar") cbind(...) else x} but I feared my solution might do some extra copying, with a performance penalty if the dotted objects in the actual call to "f' are very large. I thought the following alternative might avoid a potential performance hit by evaluating the attribute in the parent.frame (and therefore avoid extra copying?): f<-function(...) { L<-match.call(expand.dots=FALSE)[[2L]] x <- eval(substitute(attr(x,"foo"), list(x=L[[1L]]))) if (x=="bar") cbind(...) else x } system.time tests showed this second form to be only marginally faster. Is my fear about extra copying unwarranted? If not, is there a better way to get the "foo" attribute of the first argument other than my two alternatives? Thanks, Dan Murphy [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel