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 <jholt...@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_bh...@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 <beniltoncarva...@gmail.com> wrote: >> >> >> From: Benilton Carvalho <beniltoncarva...@gmail.com> >> Subject: Re: [R] CORRECTION - Storing results in a loop >> To: "Madhavi Bhave" <madhavi_bh...@yahoo.com> >> Cc: r-help@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 >> <beniltoncarva...@gmail.com> wrote: >>> maybe you just want >>> >>> Y = ONS^2 >>> >>> ? >>> >>> b >>> >>> On Mon, Feb 15, 2010 at 12:22 PM, Madhavi Bhave <madhavi_bh...@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@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@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? > ______________________________________________ R-help@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.