[R] Passing argument in nested function calls

Aarti Dahiya aarti_dahiya at hotmail.com
Thu Jun 29 22:59:00 CEST 2006


Please, do not ask why you would do this.  I have simplified my complicated 
code to just the basic problem occuring to be able to make it easier to 
understand the actual problem.

I have two function getArgs() and extractArgs() - code and test results 
provided below.
I test them using getArgs(id = 's1002') from the command line.

getArgs() prints the name of the argument as id and the actual argument as 
s1002, which is correct.

But, when I call extractArgs() from within getArgs() passing value of passed 
(stored in passed, passed is created from paste(names(args),"=", 
sQuote(args))); extractArgs() treats the value of passed as a string "id = 
's1002'" and treats the whole thing as one argument.  So, it prints 
args[[1]] as the whole thing id = 's1002'", but prints blank for 
names(args[[1]]), obviously beacuse it cannot find a name for the argument.

If I call extractArgs(id = 's1002') from the command line, it works just 
fine, prints the name of the argument as id and the actual argument as 
s1002, which is correct.

How do I fix the problem so that when extractArgs() is called within 
getArgs(), it behaves the same way as getArgs() and extracts the argument 
and argument name?  Can we unstring passed or change it into another mode?

I'll appreciate any help or pointers.  Thanks.  Aarti

getArgs <- function(...)
{
    cat("\nEntering getArgs()\n\n")

    args <- list(...)

    cat("In getArgs(), names(args[1]) is ")
    cat(names(args[1]))
    cat(" and args[[1]] is ")
    cat(args[[1]])
    cat("\n")

    passed <- paste(names(args),"=", sQuote(args))

    extractArgs(passed)

    cat("Exiting getArgs()\n\n")
}

extractArgs <- function(...)
{
    cat("\nEntering extractArgs()\n\n")

    args <- list(...)

    cat("In extractArgs(), names(args[1]) is ")
    cat(names(args[1]))
    cat(" and args[[1]] is ")
    cat(args[[1]])
    cat("\n")

    cat("\nExiting extractArgs()\n\n")
}

Test:

>getArgs(id = 's1002')

Entering getArgs()

In getArgs(), names(args[1]) is id and args[[1]] is s1002

Entering extractArgs()

In extractArgs(), names(args[1]) is  and args[[1]] is id = 's1002'

Exiting extractArgs()

Exiting getArgs()

>extractArgs(id = 's1002')

Entering extractArgs()

In extractArgs(), names(args[1]) is id and args[[1]] is s1002

Exiting extractArgs()



More information about the R-help mailing list