[R] Simple question on replace a matrix row

David Winsemius dwinsemius at comcast.net
Fri Jan 29 23:49:18 CET 2010


On Jan 29, 2010, at 4:54 PM, anna wrote:

>
> I was trying to avoid the code because I wanted to simplify it but  
> here we
> go:
>
> mat2<- matrix(nrow = 30, ncol = 7)
>       colnames(mat2) <-c( "A", "B", "C", "D", "E", "F", "G")
>
> mat1<-mainMat[1,]
>
> I get mainMat[1,] from the following function:
>
> ComputeSignalReturns <- function(vec1, prices){
>       removingNA <-  as.matrix(removeNA(cbind(prices,vec1)))
>       prices<-as.matrix(removingNA[,1])
>       vec1<- as.matrix(removingNA[,2])
>       nbDays <- length(vec1)
>       returnsOneDay <- abs(vec1[1:(nbDays - 1)]) *
> ((as.ts(lag(prices,1))/as.ts(prices)) ^vec1[1:nbDays -       1)] - 1)
>       returnsOneDay<-as.matrix(cbind(vec1[1:(nbDays -
> 1)],returnsOneDay)[which(vec1[1:(nbDays -          1)]! =0),2])
>       returnsOneDayAnnualized <- as.matrix(apply(returnsOneDay,1,
> Return.annualized,scale=252,geometric=FALSE))
>       returnsTwoDays <- abs(vec1[1:(nbDays - 2)]) *
> ((as.ts(lag(prices,2))/as.ts(prices))^vec1[1:(nbDays - 2)] - 1)
>       returnsTwoDays<-as.matrix(cbind(vec1[1:(nbDays -
> 2)],returnsTwoDays)[which(vec1[1:(nbDays - 2)]!=0),2])
>       returnsTwoDaysAnnualized <- as.matrix(apply(returnsTwoDays,1,
> Return.annualized,scale=252/2,geometric=FALSE))
>       returnsThreeDays <- abs(vec1[1:(nbDays - 3)]) *
> ((as.ts(lag(prices,3))/as.ts(prices))^vec1[1:(nbDays - 3)] - 1)
>       returnsThreeDays<-as.matrix(cbind(vec1[1:(nbDays -
> 3)],returnsThreeDays)[which(vec1[1:(nbDays - 3)]!=0),2])
>       returnsThreeDaysAnnualized <- as.matrix(apply(returnsThreeDays, 
> 1,
> Return.annualized,scale=252/3,geometric=FALSE))
>       returnsFiveDays <- abs(vec1[1:(nbDays - 5)]) *
> ((as.ts(lag(prices,5))/as.ts(prices))^vec1[1:(nbDays - 5)] - 1)
>       returnsFiveDays<-as.matrix(cbind(vec1[1:(nbDays -
> 5)],returnsFiveDays)[which(vec1[1:(nbDays - 5)]!=0),2])
>       returnsFiveDaysAnnualized <- as.matrix(apply(returnsFiveDays,1,
> Return.annualized,scale=252/5,geometric=FALSE))
>       returns <- list(returnsOneDay, returnsTwoDays, returnsThreeDays,
> returnsFiveDays)
>       returnsAnnualized <- list( returnsOneDayAnnualized,
> returnsTwoDaysAnnualized, returnsThreeDaysAnnualized,
> returnsFiveDaysAnnualized)
>
>
>       avgReturn <- data.matrix(data.frame(lapply(returns,  mean)))
>       cumReturn <- data.matrix(data.frame(lapply(returns, sum)))
>       volReturn<- data.matrix(data.frame(lapply(returns, sd)))
>       sharpeRatio <-
> as.matrix((as.numeric(data.matrix(data.frame(lapply(returnsAnnualized,
> mean))) - rep(0.0025,4)) /  
> as.numeric( matrix(lapply(returnsAnnualized,
> sd)))))
>       nbSignals <- data.matrix(data.frame(lapply(returns,  length)))
>
> nbPositives<- 
> list 
> (returnsOneDay 
> [which 
> (returnsOneDay 
> > 
> 0 
> )],returnsTwoDays 
> [which 
> (returnsTwoDays 
> > 
> 0 
> )],returnsThreeDays 
> [which(returnsThreeDays>0)],returnsFiveDays[which(returnsFiveDays>0)])
>       nbPositives<-  
> t(data.matrix(data.frame(lapply(nbPositives,length))))
>       posRatio<- matrix( as.numeric(nbPositives)  /  
> as.numeric(nbSignals))
>       summary<- matrix(cbind(avgReturn, cumReturn, volReturn,
> sharpeRatio,nbSignals,nbPositives,posRatio),nrow = 4, ncol = 7,
> dimnames=list(c("one day", "two days", "three days", "five  
> days"),c("A",
> "B", "C", "D", "E", "F", "G")))
>       return( summary)
>  }
>
> I hope it won't be confusing...

Wouldn't it have been much more simple to just show us the output of...

dput(ComputeSignalReturns)   # ?   or...
dput(mainMat)

I do not see any one plowing through that obscure code with no data to  
work with.

>
-- 

David Winsemius, MD
Heritage Laboratories
West Hartford, CT



More information about the R-help mailing list