[R] Using substitute in nested function calls

Sebastian Kranz skranz at uni-bonn.de
Tue Feb 21 13:16:52 CET 2012


Thanks, that is exactly what I have been looking for!

On Tue, 21 Feb 2012 11:58:01 +0100
  Eik Vettorazzi <E.Vettorazzi at uke.de> wrote:
> Hi Sebastian,
> how about this:
> 
> mycurve <- function (expr) {
> do.call(curve,list(substitute(expr),-100,100))
> }
> 
> mycurve(x^2)
> mycurve(sin(x/20))
> mycurve(x+x^2-x^3)
> 
> cheers
> 
> Am 21.02.2012 06:28, schrieb Sebastian Kranz:
>> Dear List members,
>> 
>> I really, like the feature that one can call R functions 
>>with 
>> mathematical expressions, e.g.
>> 
>> curve(x^2, 0, 1)
>> 
>> 
>> I wonder, how I can construct in a simple way a function 
>>like
>> 
>> mycurve = function (expr) {...}
>> 
>> such that that a call
>> 
>> mycurve(x^2)
>> 
>> has the same effect as the call
>> 
>> curve(x^2, -100,100)
>> 
>> Below is some code that works, but it seems much to 
>>complicated: it 
>> first substitutes and deparses the expression, creates a 
>>string with the 
>> new function call and then parses and evaluates the 
>>string again. Does 
>> anybody know a simpler, more elegant solution?
>> 
>> mycurve = function(expr) {
>>    # The following attempt does not work
>>    # curve(substitute(expr),-100,100)
>> 
>>    # Transform original expression to a string
>>    org.expr = deparse(substitute(expr))
>>    # Construct a string, parse it and evaluates it
>>    eval(parse(text=paste("curve(",org.expr,",-100,100)",sep="")))
>> }
>> mycurve(x^2)
>> 
>> Best regards,
>> Sebastian
>> 
>> 	[[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help at r-project.org 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.
> 
> 
> -- 
> Eik Vettorazzi
> Institut für Medizinische Biometrie und Epidemiologie
> Universitätsklinikum Hamburg-Eppendorf
> 
> Martinistr. 52
> 20246 Hamburg
> 
> T ++49/40/7410-58243
>F ++49/40/7410-57790
> 
> --
> Pflichtangaben gemäß Gesetz über elektronische 
>Handelsregister und Genossenschaftsregister sowie das 
>Unternehmensregister (EHUG):
> 
> Universitätsklinikum Hamburg-Eppendorf; Körperschaft des 
>öffentlichen Rechts; Gerichtsstand: Hamburg
> 
> Vorstandsmitglieder: Prof. Dr. Guido Sauter (Vertreter 
>des Vorsitzenden), Dr. Alexander Kirstein, Joachim Prölß, 
>Prof. Dr. Dr. Uwe Koch-Gromus 
>



More information about the R-help mailing list