[R] CORRECTION - Storing results in a loop

Benilton Carvalho beniltoncarvalho at gmail.com
Mon Feb 15 15:05:19 CET 2010


you've got jim's solution...

but if all you need to do is what you described in your previous
message, you should be able to accomplish it by:

B = log(ONS[-1,]/ONS[-nrow(ONS),])

b

On Mon, Feb 15, 2010 at 1:35 PM, jim holtman <jholtman at gmail.com> wrote:
> You might want to understand loops a little more; you are modifying
> 'j' within the loop which does not do whatever you think it should be
> doing.  You also probably want "B" to be a matrix if you want to store
> the results for everything besides the last iteration.
>
> Here is your loop corrected and followed by a vectorized way of doing
> it without loops:
>
>> ONS <- data.frame(replicate(7, 1:10))
>>
>> n = length(ONS)
>> Y = NULL
>>
>> B = matrix(nrow=nrow(ONS) - 1, ncol=length(ONS))
>>
>>
>> for (i in 1 : n)
> +  {
> +  Y[i] = ONS[i]
> +
> + #--  j     <- 1  Removed -- not needed. why is it here?
> +  for (j in 1:(length(Y[[i]])-1))
> +        {
> +   B[j, i]     <- log((Y[[i]][j+1])/(Y[[i]][j]))
> +
> +
> + #-- j <- j+1   Remove -- why is it here?
> +
> +
> +  }
> +
> +  }
>>  B  # print B
>           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
>  [1,] 0.6931472 0.6931472 0.6931472 0.6931472 0.6931472 0.6931472 0.6931472
>  [2,] 0.4054651 0.4054651 0.4054651 0.4054651 0.4054651 0.4054651 0.4054651
>  [3,] 0.2876821 0.2876821 0.2876821 0.2876821 0.2876821 0.2876821 0.2876821
>  [4,] 0.2231436 0.2231436 0.2231436 0.2231436 0.2231436 0.2231436 0.2231436
>  [5,] 0.1823216 0.1823216 0.1823216 0.1823216 0.1823216 0.1823216 0.1823216
>  [6,] 0.1541507 0.1541507 0.1541507 0.1541507 0.1541507 0.1541507 0.1541507
>  [7,] 0.1335314 0.1335314 0.1335314 0.1335314 0.1335314 0.1335314 0.1335314
>  [8,] 0.1177830 0.1177830 0.1177830 0.1177830 0.1177830 0.1177830 0.1177830
>  [9,] 0.1053605 0.1053605 0.1053605 0.1053605 0.1053605 0.1053605 0.1053605
>>
>> # now using 'vectorized' operations; should have same values
>> sapply(ONS, function(.col){
> +     log(tail(.col, -1) / head(.col, -1))
> + })
>             X1        X2        X3        X4        X5        X6        X7
>  [1,] 0.6931472 0.6931472 0.6931472 0.6931472 0.6931472 0.6931472 0.6931472
>  [2,] 0.4054651 0.4054651 0.4054651 0.4054651 0.4054651 0.4054651 0.4054651
>  [3,] 0.2876821 0.2876821 0.2876821 0.2876821 0.2876821 0.2876821 0.2876821
>  [4,] 0.2231436 0.2231436 0.2231436 0.2231436 0.2231436 0.2231436 0.2231436
>  [5,] 0.1823216 0.1823216 0.1823216 0.1823216 0.1823216 0.1823216 0.1823216
>  [6,] 0.1541507 0.1541507 0.1541507 0.1541507 0.1541507 0.1541507 0.1541507
>  [7,] 0.1335314 0.1335314 0.1335314 0.1335314 0.1335314 0.1335314 0.1335314
>  [8,] 0.1177830 0.1177830 0.1177830 0.1177830 0.1177830 0.1177830 0.1177830
>  [9,] 0.1053605 0.1053605 0.1053605 0.1053605 0.1053605 0.1053605 0.1053605
>>
>>
>
>
> On Mon, Feb 15, 2010 at 7:41 AM, Madhavi Bhave <madhavi_bhave at yahoo.com> wrote:
>> Dear Sir,
>>
>> Thanks a lot for your quick solution. But still I will like someone to guide me the solution as per my requirement. The problem is actually I am not looking for the square of each term. I have used it to give some example since I didn't want to confuse the matter. My process is altogether different and I need to use loop. So here is my actual code. I am trying to use Historical simulation and for that I need to calculate LN(New rate / old rate for each of the instrument separately).
>>
>> Here is my actual code -
>>
>> ONS = read.csv('Instrument.csv')
>> n = length(ONS)
>> Y = NULL
>> B = array()
>>
>> for (i in 1 : n)
>>  {
>>  Y[i] = ONS[i]
>>   j     <- 1
>>  for (j in 1:(length(Y[[i]])-1))
>>        {
>>   B[j]     <- log((Y[[i]][j+1])/(Y[[i]][j]))
>>
>>
>>  j <- j+1
>>
>>
>>  }
>>
>>  }
>>
>>
>>
>>
>> --- On Mon, 15/2/10, Benilton Carvalho <beniltoncarvalho at gmail.com> wrote:
>>
>>
>> From: Benilton Carvalho <beniltoncarvalho at gmail.com>
>> Subject: Re: [R] CORRECTION - Storing results in a loop
>> To: "Madhavi Bhave" <madhavi_bhave at yahoo.com>
>> Cc: r-help at r-project.org
>> Date: Monday, 15 February, 2010, 4:29 AM
>>
>>
>> sorry, meant to type:
>>
>> B = ONS^2
>>
>> cheers,
>> benilton
>>
>> On Mon, Feb 15, 2010 at 12:28 PM, Benilton Carvalho
>> <beniltoncarvalho at gmail.com> wrote:
>>> maybe you just want
>>>
>>> Y = ONS^2
>>>
>>> ?
>>>
>>> b
>>>
>>> On Mon, Feb 15, 2010 at 12:22 PM, Madhavi Bhave <madhavi_bhave at yahoo.com> wrote:
>>>> Dear R Helpers
>>>>
>>>> (There is a small correction in my earlier mail. In the 'instrument.csv' file, I had mentioned only three columns. Actually there are 7 columns. I regret the error. Rest contents remains the same. Thanks)
>>>>
>>>> I have an 'instrument.csv' file with 7 instrument names and 5 rates each i.e. it has 7 columns and 6 rows (including row names).
>>>>
>>>> 'instrument.csv'
>>>>
>>>> instrument1      instrument2   ........     instrument7
>>>> 12                         5                              14
>>>> 11                         7                                7
>>>> 14                       11                                3
>>>>   8                       21                              10
>>>> 11                         3                                5
>>>>
>>>>
>>>> Following is my R code.
>>>>
>>>> ONS = read.csv('Instrument.csv')
>>>> n = length(ONS)
>>>>
>>>> Y = NULL
>>>> B = NULL
>>>>
>>>> for (i in 1 : n)
>>>>
>>>>  {
>>>>
>>>>  Y[i] = ONS[i]
>>>>
>>>>   for (j in 1 : length(Y[[i]]))
>>>>    {
>>>>    B[j] = (Y[[i]][j])^2
>>>>    }
>>>>
>>>>  }
>>>>
>>>> Problem is when I type B, I get the processed result only for the last column i.e. Y[7]. It doesn't store results for Y[1] to Y[7].
>>>>
>>>> I need B[1], B[2].......upto B[7].
>>>>
>>>> Please guide me how do I store individual column processed results?
>>>>
>>>> Thanking you all in advance
>>>>
>>>> Regards
>>>>
>>>> Madhavi
>>>>
>>>>
>>>>
>>>>
>>>>      The INTERNET now has a personality. YOURS! See your Yahoo! Homepage.
>>>>        [[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.
>>>>
>>>>
>>>
>>
>>
>>
>>      Your Mail works best with the New Yahoo Optimized IE8. Get it NOW! http://downloads.yahoo.com/in/internetexplorer/
>>        [[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.
>>
>>
>
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem that you are trying to solve?
>



More information about the R-help mailing list