[R] problems with integrate ... arguments

Duncan Murdoch murdoch at stats.uwo.ca
Thu Apr 9 16:52:50 CEST 2009


On 09/04/2009 10:19 AM, Ravi Varadhan wrote:
> Richard,
> 
> Your function f() is already vectorized, and it works well (see below).  Therefore, you don't need to create f2().  

He did say that this was a simplified example.

The problem appears to be in Vectorize, which uses match.call() to get 
the args from the call to your f function.  match.call() can make 
substitutions for ... args, but only seems to do so for one level up, 
and the dots are being passed through two levels here:  ... as an arg to 
integrate, which creates a local function ff, and passes ... through it.

Not sure yet where to fix this...

Duncan Murdoch


> 
> f = function(x, const) 2^x + const
> 
> testval = 2
> 
>> integrate(f, 0.5, 1, const=testval)
> 1.845111 with absolute error < 2.0e-14
> 
> 
> Ravi. 
> 
> ____________________________________________________________________
> 
> Ravi Varadhan, Ph.D.
> Assistant Professor,
> Division of Geriatric Medicine and Gerontology
> School of Medicine
> Johns Hopkins University
> 
> Ph. (410) 502-2619
> email: rvaradhan at jhmi.edu
> 
> 
> ----- Original Message -----
> From: Richard Morey <R.D.Morey at rug.nl>
> Date: Thursday, April 9, 2009 8:10 am
> Subject: [R] problems with integrate ... arguments
> To: r-help at r-project.org
> 
> 
>> Hi everyone,
>>  
>>  I saw this problem dealt with here:
>>  
>>  
>>  but no one answered that request that I can tell. I'm having the same
>>  problem. I'm having problems passing arguments to functions that I'd
>>  like to integrate. I could swear this worked in the past, but I can't
>>  get it to work now. I'm running R on Windows.
>>  
>>  Here's my toy code to reproduce the problem:
>>  
>>  
>>  R.Version()$version.string
>>  # [1] "R version 2.8.1 (2008-12-22)"
>>  
>>  f=function(x,const)
>>  2^x+const
>>  
>>  f2=Vectorize(f,c("x"))
>>  
>>  testval=2
>>  
>>  f2(1:5,testval)
>>  # [1]  4  6 10 18 34
>>  # The vectorized function seems to work right.
>>  
>>  integrate(f2,.5,1,c=2)
>>  # Works. Returns
>>  # 1.845111 with absolute error < 2.0e-14
>>  
>>  integrate(f=f2,.5,1,const=testval)
>>  # Doesn't work. Returns
>>  # Error in eval(expr, envir, enclos) :
>>  #  ..1 used in an incorrect context, no ... to look in
>>  
>>  I understand that I don't have to Vectorize this function for it to
>>  work, but the more complicated functions I'm using require Vectorization.
>>  
>>  Why can't I pass the argument "const" as a variable, instead of a value?
>>    I don't understand this error.
>>  
>>  Thanks in advance,
>>  Richard Morey
>>  
>>  -- 
>>  Richard D. Morey
>>  Assistant Professor
>>  Psychometrics and Statistics
>>  Rijksuniversiteit Groningen / University of Groningen
>>  
>>  ______________________________________________
>>  R-help at r-project.org mailing list
>>  
>>  PLEASE do read the posting guide 
>>  and provide commented, minimal, self-contained, reproducible code.
> 
> ______________________________________________
> 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.




More information about the R-help mailing list