Dear Peter, I tried with the comma already, it did not work. > rets TY1.lev SP1.lev GC1.lev CL1.lev 2000-01-03 66.60938 1702.7 453.7 18.34 2000-01-04 67.09375 1647.7 447.8 18.29 2000-01-05 66.40625 1649.4 446.2 17.65 2000-01-06 66.73438 1639.9 446.5 17.52 2000-01-07 67.10938 1696.4 447.0 16.96 2000-01-10 66.87500 1710.9 446.8 17.41 2000-01-11 66.09375 1690.2 448.5 18.51 2000-01-12 65.92188 1677.9 447.8 19.02 2000-01-13 66.54688 1694.4 449.2 19.43 2000-01-14 66.14062 1713.9 449.0 20.76 2000-01-17 66.14062 1713.9 449.0 20.76 2000-01-18 65.65625 1705.4 453.7 21.59 2000-01-19 65.87500 1708.4 454.4 22.28 2000-01-20 65.59375 1692.9 453.4 22.40 2000-01-21 65.51562 1689.6 453.8 22.63 2000-01-24 66.09375 1647.7 452.2 22.26 2000-01-25 66.01562 1654.5 450.7 22.71 2000-01-26 66.14062 1651.3 450.6 22.27 2000-01-27 66.10938 1645.7 451.4 21.75 2000-01-28 66.42188 1602.4 447.5 21.65 > func <- function(x,z){ + + a <- embed(x[,z, drop=FALSE], 2)[,1]/embed(x[,z, drop=FALSE], 2)[,2] - 1 + + return(a) + } > merge(rets, Bond.ret=zoo(apply(rets,2,func,z="TY1.lev"), > order.by=time(rets)[-1])) Error in x[, z, drop = FALSE] : incorrect number of dimensions
Nothing was wrong with your suggestion, except that I did not come up with it. :-) I've been using a lot of embed and apply(, 1, FUNC) functions lately and out of inertia I tried the same. I specify a new variable (with suffix ."ret") within merge() function. Kind Regards, Sergey On Wed, Feb 11, 2009 at 13:47, Peter Dalgaard <p.dalga...@biostat.ku.dk> wrote: > Sergey Goriatchev wrote: >> Hello, everyone! >> >> Assume you have this data: >> data <- structure(c(66.609375, 67.09375, 66.40625, 66.734375, 67.109375, >> 66.875, 66.09375, 65.921875, 66.546875, 66.140625, 66.140625, >> 65.65625, 65.875, 65.59375, 65.515625, 66.09375, 66.015625, 66.140625, >> 66.109375, 66.421875, 1702.7, 1647.7, 1649.4, 1639.9, 1696.4, >> 1710.9, 1690.2, 1677.9, 1694.4, 1713.9, 1713.9, 1705.4, 1708.4, >> 1692.9, 1689.6, 1647.7, 1654.5, 1651.3, 1645.7, 1602.4, 453.7, >> 447.8, 446.2, 446.5, 447, 446.8, 448.5, 447.8, 449.2, 449, 449, >> 453.7, 454.4, 453.4, 453.8, 452.2, 450.7, 450.6, 451.4, 447.5, >> 18.34, 18.29, 17.65, 17.52, 16.96, 17.41, 18.51, 19.02, 19.43, >> 20.76, 20.76, 21.59, 22.28, 22.4, 22.63, 22.26, 22.71, 22.27, >> 21.75, 21.65), .Dim = c(20L, 4L), .Dimnames = list(NULL, c("TY1.lev", >> "SP1.lev", "GC1.lev", "CL1.lev")), index = structure(c(10959, >> 10960, 10961, 10962, 10963, 10966, 10967, 10968, 10969, 10970, >> 10973, 10974, 10975, 10976, 10977, 10980, 10981, 10982, 10983, >> 10984), class = "Date"), class = "zoo") >> >> What I want to do is to calculate simple return on each column >> (return=P1/P0-1) >> and put it in new columns. >> >> I've tried like this: >> >> #convenience function >> func <- function(x,z){ >> a <- embed(x[z, drop=FALSE], 2)[,1]/embed(x[z, drop=FALSE], 2)[,2] - 1 >> return(a) >> } >> >> data <- merge(data, Bond.ret=zoo(apply(data, 2, func, z="TY1.lev"), >> order.by=time(data)[-1])) >> >> and I get this: >> Error in embed(x[z, drop = FALSE], 2) : wrong embedding dimension >> >> What am I doing wrong? >> (Somehow I cannot understand how to work with columns in apply(), with >> rows, that is apply(,1,FUN) I have no problem. > > The immediate problem is that you are missing a comma in x[, z, drop = > FALSE]. But what was wrong with > > cbind(data,data/lag(data,-1)-1, suffixes=c("","r")) > > (except that it adds a "." to the orginal names, I see no way of NOT > adding a suffix?) > > -- > O__ ---- Peter Dalgaard Ă˜ster Farimagsgade 5, Entr.B > c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K > (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 > ~~~~~~~~~~ - (p.dalga...@biostat.ku.dk) FAX: (+45) 35327907 > > -- I'm not young enough to know everything. /Oscar Wilde Experience is one thing you can't get for nothing. /Oscar Wilde When you are finished changing, you're finished. /Benjamin Franklin Tell me and I forget, teach me and I remember, involve me and I learn. /Benjamin Franklin Luck is where preparation meets opportunity. /George Patten ______________________________________________ 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.