Denver, > data is a matrix like this > AMR BS GE HR MO UK SP500 > 1974 -0.3505 -0.1154 -0.4246 -0.2107 -0.0758 0.2331 -0.2647 > 1975 0.7083 0.2472 0.3719 0.2227 0.0213 0.3569 0.3720 > 1976 0.7329 0.3665 0.2550 0.5815 0.1276 0.0781 0.2384 > 1977 -0.2034 -0.4271 -0.0490 -0.0938 0.0712 -0.2721 -0.0718 > 1978 0.1663 -0.0452 -0.0573 0.2751 0.1372 -0.1346 0.0656 > 1979 -0.2659 0.0158 0.0898 0.0793 0.0215 0.2254 0.1844 > 1980 0.0124 0.4751 0.3350 -0.1894 0.2002 0.3657 0.3242 > 1981 -0.0264 -0.2042 -0.0275 -0.7427 0.0913 0.0479 -0.0491 > 1982 1.0642 -0.1493 0.6968 -0.2615 0.2243 0.0456 0.2141 > 1983 0.1942 0.3680 0.3110 1.8682 0.2066 0.2640 0.2251
It is perhaps more natural to specify this information as a data frame. > I want to calculate the return say AMR,so I use > re=numeric(10) > for (i in 2:nrow(data)) > re[1]=0 > re[i]=log(data[i]/data[i-1]) > to my surprise, the result is > > re > [1] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 > [9] 0.00000 -1.70109 A couple of things: 1. You don't need re[1]=0 inside the loop (or at all, in fact, since numeric(10) will give a default value of 0). 2. It would be better to vectorise the code, to avoid the loop altogether. 3. You are looping over elements in the first column of data, which is why the log values are zero. Some better code: re = c(0, diff(log(data[,"AMR"]))) Regards, Richie. Mathematical Sciences Unit HSL ------------------------------------------------------------------------ ATTENTION: This message contains privileged and confidential inform...{{dropped:20}} ______________________________________________ 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.