[R] How to convert List object to function arguments?
Shiazy
shiazy at gmail.com
Sat Mar 3 17:45:31 CET 2007
Patrick Burns wrote:
> You might have found 'do.call' in S Poetry.
>
I've taken a look just now.
Thank you so much!
-- Marco
> Patrick Burns
> patrick at burns-stat.com
> +44 (0)20 8525 0696
> http://www.burns-stat.com
> (home of S Poetry and "A Guide for the Unwilling S User")
>
> Shiazy wrote:
>
>> Dear R gurus,
>>
>> I have a function "goftests" that receives the following arguments:
>> * a vector "x" of data values;
>> * a distribution name "dist";
>> * the dots list ("...") containing a list a parameters to pass to CDF
>> function;
>> and calls several goodness-of-fit tests on the given data values
>> against the given distribution.
>> That is:
>>
>> ##### BEGIN CODE SNIP #####
>>
>> # Covert a distribution name to the related CDF function name
>> distname2cdfname <- function( dist )
>> {
>> if ( dist == "beta" ) { return( "pbeta" ); }
>> if ( dist == "cauchy" ) { return( "pcauchy" ); }
>>
>> # many other and personalized (e.g. pareto, ...) distributions ...
>>
>> return( "" ); # fall-back case
>> }
>>
>> # Performs some GoF tests (KS, Chi-Square, Anderson-Darling,...)
>> # (the "..." list contains parameters for CDF function)
>> goftests <- function( x, dist, ... )
>> {
>> cdfname <- distname2cdfname( dist );
>> res$ks <- ks.test( x, cdfname, ... );
>> # res$chisq <- ...
>> # res$anddarl <- ...
>>
>> return( res )
>> };
>>
>> ##### END CODE SNIP #####
>>
>> So the problem is passing "..." to CDF function (for instance, see
>> ks.test above) in the "right form". The "..." is passed (to
>> "goftests") as a list object and it should be converted to an
>> "argument list".
>> For instance:
>>
>> ##### BEGIN CODE SNIP #####
>>
>> parms <- list( shape1 = 2, shape2 = 5 );
>> goftests( x, "beta", parms[["shape1"]], parms[["shape2"]] ); # Works!
>> goftests( x, "beta", parms ) # Don't Works!
>>
>> parms <- list( aNum = 5, aVector = c(1,2,3), aMatrix =
>> matrix(c(4,5,6,7,8,9),nrow=2,byrow=T) );
>> goftests( x, "my-special-distr", parms[["aVector"]],
>> parms[["aMatrix"]], parms[["aNumber"]] ); # Works!
>> goftests( x, "my-special-distr", parms ) # Don't Works!
>>
>> ##### END CODE SNIP #####
>>
>> Obviously I have to use the "don't work" form.
>>
>> How can I do this in R (if possible)?
>>
>> Thank you very much in advance!
>>
>> Best regards,
>>
>> -- Marco
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>>
>>
>
More information about the R-help
mailing list