[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