Hello, everyone I have a piece of code that looks like this: mrets <- merge(mrets, BMM.SR=apply(mrets, 1, MyFunc, ret="BMM.AV120", stdev="BMM.SD120")) mrets <- merge(mrets, GM1.SR=apply(mrets, 1, MyFunc, ret="GM1.AV120", stdev="GM1.SD120")) mrets <- merge(mrets, IYC.SR=apply(mrets, 1, MyFunc, ret="IYC.AV120", stdev="IYC.SD120")) mrets <- merge(mrets, FCA.SR=apply(mrets, 1, MyFunc, ret="FCA.AV120", stdev="FCA.SD120")) mrets <- merge(mrets, IMM.SR=apply(mrets, 1, MyFunc, ret="IMM.AV120", stdev="IMM.SD120")) mrets <- merge(mrets, BME.SR=apply(mrets, 1, MyFunc, ret="BME.AV120", stdev="BME.SD120")) mrets <- merge(mrets, CRT.SR=apply(mrets, 1, MyFunc, ret="CRT.AV120", stdev="CRT.SD120")) mrets <- merge(mrets, GTF.SR=apply(mrets, 1, MyFunc, ret="GTF.AV120", stdev="GTF.SD120")) mrets <- merge(mrets, ERU.SR=apply(mrets, 1, MyFunc, ret="ERU.AV120", stdev="ERU.SD120")) mrets <- merge(mrets, ERE.SR=apply(mrets, 1, MyFunc, ret="ERE.AV120", stdev="ERE.SD120")) mrets <- merge(mrets, EPT.SR=apply(mrets, 1, MyFunc, ret="EPT.AV120", stdev="EPT.SD120")) mrets <- merge(mrets, EVA.SR=apply(mrets, 1, MyFunc, ret="EVA.AV120", stdev="EVA.SD120")) mrets <- merge(mrets, EMT.SR=apply(mrets, 1, MyFunc, ret="EMT.AV120", stdev="EMT.SD120")) mrets <- merge(mrets, EMM.SR=apply(mrets, 1, MyFunc, ret="EMM.AV120", stdev="EMM.SD120")) mrets <- merge(mrets, EMV.SR=apply(mrets, 1, MyFunc, ret="EMV.AV120", stdev="EMV.SD120")) mrets <- merge(mrets, ETM.SR=apply(mrets, 1, MyFunc, ret="ETM.AV120", stdev="ETM.SD120")) Is there a way to simplify this, some sort of loop? mrets is a zoo object. .AV120 and .SD120 are columns in this object. I need the exact .SR column names. This does not work: SRnames <- paste(colnames.mrets, ".SR", sep="") AVnames <- paste(colnames.mrets, ".AV120", sep="") SDnames <- paste(colnames.mrets, ".SD120", sep="") for(i in seq(SRnames)){ mrets <- merge(mrets, SRnames[i]=apply(mrets, 1, MyFunc, ret=AVnames[i], stdev=SDnames[i])) } Help much appreciated. Regards, Sergey -- Simplicity is the last step of art./Bruce Lee The more you know, the more you know you don't know. /Myself 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 Luck is where preparation meets opportunity. /George Patten Kniven sk?rpes bara mot stenen.
How about this (not tested, since you did not provide example data nor function code): --------------------------------------- SRnames <- paste(colnames.mrets, ".SR", sep="") AVnames <- paste(colnames.mrets, ".AV120", sep="") SDnames <- paste(colnames.mrets, ".SD120", sep="") names.matrix<-cbind(SRnames,AVnames,SDnames) mrets.list<-apply(names.matrix,1,function(.names){ apply(mrets,1,MyFunc,ret=.names[2],stdev=.names[3]} ) names(mrets.list)<-names.matrix[,1] mrets<-do.call("merge",mrets.list) ------------------------------------------------- ? /Gustaf On Wed, Mar 31, 2010 at 12:10 PM, Sergey Goriatchev <sergeyg at gmail.com> wrote:> Hello, everyone > > I have a piece of code that looks like this: > > mrets <- merge(mrets, BMM.SR=apply(mrets, 1, MyFunc, ret="BMM.AV120", > stdev="BMM.SD120")) > mrets <- merge(mrets, GM1.SR=apply(mrets, 1, MyFunc, ret="GM1.AV120", > stdev="GM1.SD120")) > mrets <- merge(mrets, IYC.SR=apply(mrets, 1, MyFunc, ret="IYC.AV120", > stdev="IYC.SD120")) > mrets <- merge(mrets, FCA.SR=apply(mrets, 1, MyFunc, ret="FCA.AV120", > stdev="FCA.SD120")) > mrets <- merge(mrets, IMM.SR=apply(mrets, 1, MyFunc, ret="IMM.AV120", > stdev="IMM.SD120")) > mrets <- merge(mrets, BME.SR=apply(mrets, 1, MyFunc, ret="BME.AV120", > stdev="BME.SD120")) > mrets <- merge(mrets, CRT.SR=apply(mrets, 1, MyFunc, ret="CRT.AV120", > stdev="CRT.SD120")) > mrets <- merge(mrets, GTF.SR=apply(mrets, 1, MyFunc, ret="GTF.AV120", > stdev="GTF.SD120")) > mrets <- merge(mrets, ERU.SR=apply(mrets, 1, MyFunc, ret="ERU.AV120", > stdev="ERU.SD120")) > mrets <- merge(mrets, ERE.SR=apply(mrets, 1, MyFunc, ret="ERE.AV120", > stdev="ERE.SD120")) > mrets <- merge(mrets, EPT.SR=apply(mrets, 1, MyFunc, ret="EPT.AV120", > stdev="EPT.SD120")) > mrets <- merge(mrets, EVA.SR=apply(mrets, 1, MyFunc, ret="EVA.AV120", > stdev="EVA.SD120")) > mrets <- merge(mrets, EMT.SR=apply(mrets, 1, MyFunc, ret="EMT.AV120", > stdev="EMT.SD120")) > mrets <- merge(mrets, EMM.SR=apply(mrets, 1, MyFunc, ret="EMM.AV120", > stdev="EMM.SD120")) > mrets <- merge(mrets, EMV.SR=apply(mrets, 1, MyFunc, ret="EMV.AV120", > stdev="EMV.SD120")) > mrets <- merge(mrets, ETM.SR=apply(mrets, 1, MyFunc, ret="ETM.AV120", > stdev="ETM.SD120")) > > Is there a way to simplify this, some sort of loop? > mrets is a zoo object. > .AV120 and .SD120 are columns in this object. > I need the exact .SR column names. > > This does not work: > SRnames <- paste(colnames.mrets, ".SR", sep="") > AVnames <- paste(colnames.mrets, ".AV120", sep="") > SDnames <- paste(colnames.mrets, ".SD120", sep="") > > for(i in seq(SRnames)){ > mrets <- merge(mrets, SRnames[i]=apply(mrets, 1, MyFunc, > ret=AVnames[i], stdev=SDnames[i])) > } > > > Help much appreciated. > > Regards, > Sergey > > > -- > Simplicity is the last step of art./Bruce Lee > The more you know, the more you know you don't know. /Myself > > 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 > Luck is where preparation meets opportunity. /George Patten > > Kniven sk?rpes bara mot stenen. > > ______________________________________________ > 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. >-- Gustaf Rydevik, M.Sci. tel: +46(0)703 051 451 address:Essingetorget 40,112 66 Stockholm, SE skype:gustaf_rydevik
On Wed, Mar 31, 2010 at 5:11 PM, Sergey Goriatchev <sergeyg at gmail.com> wrote:> but > > data <- merge(data,data.list) > > works. > > Neither data or data.list is a list, so do.call does not work. > I am very weak on lists, never used them before > > Best, > SergeyHej Sergey, Ok; I was wondering if the apply thing would work. Cool that merge would be clever enough to append a matrix. I'm guessing that you've got what you needed then? For reference, (and for the general list) I had changed the code before Sergeys response, replacing apply() with lapply(). That code follows below. Best regards, Gustaf ----------------------------- cnames <- c("BMM", "GM1", "IYC", "FCA", "IMM", "BME", "CRT", "GTF", "ERU", "ERE", "EPT", "EVA", "EMT", "EMM", "EMV", "ETM") AVnames <- paste(cnames, ".AV120", sep="") SDnames <- paste(cnames, ".SD120", sep="") a <- zoo(matrix(rep(seq(from=160, to=10, by=-10), 1000), ncol=16, byrow=TRUE)) colnames(a) <- AVnames b <- zoo(matrix(rep(2, 16000), ncol=16)) colnames(b) <- SDnames data <- merge(a, b) MyFunc <- function(x, ret, stdev){ if(any(is.na(c(x[ret], x[stdev])))){ return(NA) }else{ return(x[ret]/x[stdev]) } } names.df<-data.frame(rbind(SRnames,AVnames,SDnames)) func <- function(.names){ apply(data, 1, MyFunc, ret=.names[2], stdev=.names[3]) } data.list<-lapply(names.df, func) mrets<-do.call("merge",c(list(data),data.list)) On Wed, Mar 31, 2010 at 12:33, Gustaf Rydevik <gustaf.rydevik at gmail.com> wrote:> How about this (not tested, since you did not provide example data nor > function code): > > --------------------------------------- > > SRnames <- paste(colnames.mrets, ".SR", sep="") > AVnames <- paste(colnames.mrets, ".AV120", sep="") > SDnames <- paste(colnames.mrets, ".SD120", sep="") > names.matrix<-cbind(SRnames,AVnames,SDnames) > > mrets.list<-apply(names.matrix,1,function(.names){ > apply(mrets,1,MyFunc,ret=.names[2],stdev=.names[3]} > ) > names(mrets.list)<-names.matrix[,1] > mrets<-do.call("merge",mrets.list) > > ------------------------------------------------- > ? > /Gustaf > > On Wed, Mar 31, 2010 at 12:10 PM, Sergey Goriatchev <sergeyg at gmail.com> wrote: >> Hello, everyone >> >> I have a piece of code that looks like this: >> >> mrets <- merge(mrets, BMM.SR=apply(mrets, 1, MyFunc, ret="BMM.AV120", >> stdev="BMM.SD120")) >> mrets <- merge(mrets, GM1.SR=apply(mrets, 1, MyFunc, ret="GM1.AV120", >> stdev="GM1.SD120")) >> mrets <- merge(mrets, IYC.SR=apply(mrets, 1, MyFunc, ret="IYC.AV120", >> stdev="IYC.SD120")) >> mrets <- merge(mrets, FCA.SR=apply(mrets, 1, MyFunc, ret="FCA.AV120", >> stdev="FCA.SD120")) >> mrets <- merge(mrets, IMM.SR=apply(mrets, 1, MyFunc, ret="IMM.AV120", >> stdev="IMM.SD120")) >> mrets <- merge(mrets, BME.SR=apply(mrets, 1, MyFunc, ret="BME.AV120", >> stdev="BME.SD120")) >> mrets <- merge(mrets, CRT.SR=apply(mrets, 1, MyFunc, ret="CRT.AV120", >> stdev="CRT.SD120")) >> mrets <- merge(mrets, GTF.SR=apply(mrets, 1, MyFunc, ret="GTF.AV120", >> stdev="GTF.SD120")) >> mrets <- merge(mrets, ERU.SR=apply(mrets, 1, MyFunc, ret="ERU.AV120", >> stdev="ERU.SD120")) >> mrets <- merge(mrets, ERE.SR=apply(mrets, 1, MyFunc, ret="ERE.AV120", >> stdev="ERE.SD120")) >> mrets <- merge(mrets, EPT.SR=apply(mrets, 1, MyFunc, ret="EPT.AV120", >> stdev="EPT.SD120")) >> mrets <- merge(mrets, EVA.SR=apply(mrets, 1, MyFunc, ret="EVA.AV120", >> stdev="EVA.SD120")) >> mrets <- merge(mrets, EMT.SR=apply(mrets, 1, MyFunc, ret="EMT.AV120", >> stdev="EMT.SD120")) >> mrets <- merge(mrets, EMM.SR=apply(mrets, 1, MyFunc, ret="EMM.AV120", >> stdev="EMM.SD120")) >> mrets <- merge(mrets, EMV.SR=apply(mrets, 1, MyFunc, ret="EMV.AV120", >> stdev="EMV.SD120")) >> mrets <- merge(mrets, ETM.SR=apply(mrets, 1, MyFunc, ret="ETM.AV120", >> stdev="ETM.SD120")) >> >> Is there a way to simplify this, some sort of loop? >> mrets is a zoo object. >> .AV120 and .SD120 are columns in this object. >> I need the exact .SR column names. >> >> This does not work: >> SRnames <- paste(colnames.mrets, ".SR", sep="") >> AVnames <- paste(colnames.mrets, ".AV120", sep="") >> SDnames <- paste(colnames.mrets, ".SD120", sep="") >> >> for(i in seq(SRnames)){ >> mrets <- merge(mrets, SRnames[i]=apply(mrets, 1, MyFunc, >> ret=AVnames[i], stdev=SDnames[i])) >> } >> >> >> Help much appreciated. >> >> Regards, >> Sergey >> >> >> -- >> Simplicity is the last step of art./Bruce Lee >> The more you know, the more you know you don't know. /Myself >> >> 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 >> Luck is where preparation meets opportunity. /George Patten >> >> Kniven sk?rpes bara mot stenen. >> >> ______________________________________________ >> 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. >> > >-- Gustaf Rydevik, M.Sci. tel: +46(0)703 051 451 address:Essingetorget 40,112 66 Stockholm, SE skype:gustaf_rydevik