[Rd] Symbol and Ellipsis problems
Duncan Murdoch
murdoch at stats.uwo.ca
Tue Mar 20 11:47:21 CET 2007
On 3/20/2007 6:36 AM, Thomas McCallum wrote:
> Hi Everyone,
>
> When I have a load of functions which have various arguments passed
> via the ellipsis argument it keeps on assigning them as symbol making
> them unusable to the function. My current work around involves using
> do.call but this is rather cumbersome.
>
> Does anyone know why it suddenly changes the types to symbol and if
> there is a way to get the actual data pointed to by the symbol? (I
> have tried eval but that does not work and most functions just treat a
> symbol as a string).
>
> ( An example which shows the type conversion is given below with the
> output - the key is the following "dataX=data" which makes the object
> data passed as a symbol and not the actual data).
match.call() doesn't evaluate the args, it just shows you the
unevaluated call. If you print your "extras" variable in your function,
you'll see
$dataX
data
because you called the function with dataX=data. If you'd called it as
x(dataY = 1+2) you'd see
1 + 2
[1] "language"
for the same reason.
If you want to evaluate the ... args, use list(...) instead of match.call.
Duncan Murdoch
> Many thanks
>
> Tom
>
> ====EXAMPLE CODE====
> data=c(1,2,3,4,5,6,7,8,9);
>
> x <- function( ... ) {
> args <- list();
> extras <- match.call(expand.dots = FALSE)$...;
> for( i in names(extras) ) {
> args[[ i ]] <- extras[[ i ]];
> print(args[[i]]);
> print(typeof(extras[[i]]));
> }
>
>
> }
>
> cat("TYPE OF DATA:");
> print(typeof(data));
> x(dataX=data);
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list