[R] loop function and integrate?

Berend Hasselman bhh at xs4all.nl
Fri Nov 30 19:34:08 CET 2012


On 30-11-2012, at 16:08, faeriewhisper wrote:

> Hi guys! 
> I have to compute something and i don't know what i'm doing wrong. my code
> is a bit complex, but imagine that is something like this: 
> 
> a = c(1,2,3,4) 
> ia = length(a) 
> 
> x = seq(1,100,length=0.1) 
> ib = length(x) 
> 
> int1 = numeric(ib) 
> b = numeric(ib) 
> 
> for(j in 1:ia) { 
>   H = function(x) {sin(x + a[j])} 
>      for(i in 1:ib) {	
>                int =  integrate(H, lower = 0, upper = x[i]) 
>                int1[i] = int[1] 
>                b[i] = 1 + a[i] 
>                } 
>        end 
>   int1 = unlist(int1) 
>   int2 = int1*b 
>   ss[j] = sum(int2) 
> } 
> end 
> 

What are you doing?
What's the "end" doing in your code in two places.
end is a function to extract and encode the last observation of a time series object. See ?end
It makes absolutely no sense to put them in your code.
Remove them immediately.

You haven't declared ss to be a vector.
So before the start of the j loop insert ss <- numeric(ia)

And simplify your code:

ss <- numeric(ia)

for(j in 1:ia) { 
  H = function(x) {sin(x + a[j])} 
     for(i in 1:ib) {	
               int =  integrate(H, lower = 0, upper = x[i])  
               int1[i] = int$value
               b[i] = 1 + a[i] 
               }
  ss[j] = sum(int1*b)    
} 
ss

And more simplification is possible by eliminating b, which I leave to you.

Berend




More information about the R-help mailing list