Martyn Thanks for the help the function works. I used lower.tri() in package(ape) to extract the Lower triangular portion of the matrix since thats what I needed the func looks like this Thanks to all who contributed-the function works. IED <- function(risk) { n <- length(risk) mrisk <- matrix(rep(risk,n),ncol=n,byrow=T) diff <- abs(risk - mrisk) library(base) keep <- lower.tri(diff) c(diff)[c(keep)] } Thanks Oarabile Martyn Byng wrote: > Hi, > > I am assuming this is in either R or SPlus ? > > In both of these packages it is best to avoid doing loops where > possible, something along the lines of > > IED <- function(risk) { > n <- length(risk) > mrisk <- matrix(rep(risk,n),ncol=n,byrow=T) > diff <- abs(risk - mrisk) > keep <- matrix(T,nrow=n,ncol=n) > diag(keep) <- F > c(diff)[c(keep)] > } > > seems to work. > > In your code I think it is the line > > Difference<-Difference[-c(1:j)] > > that is at fault, this drops the first j elements from Difference, > which is Difference[j] - Difference[j] only for j = 1 > > Hope that helps > > Martyn > > Oarabile Molaodi wrote: > >>> I'm trying to write a function that takes a vector of length n and >>> then takes the first value of the vector i.e j=1 and forms a new >>> vector of length n (i.e replicate the first value n times). This >>> function will then calculate the absoulte difference of the original >>> vector and the new vector and store the results omitting the >>> difference between the value and itself. This function should be >>> able to repeat the procedure for each of the j's i.e j=2 to n. The >>> results should all be stored together. Below is what I've tried so >>> far but it seems to work only for j=1 . >>> >>> Your help will be highly appreciated. >> >> >> >> >>> IED<-function(risk){ >>> n<-length(risk) >>> i<-c(1:n) >>> Diff<-numeric() >>> for(j in 1:n){ >>> relrisk<-risk >>> relrisk[i]<-relrisk[j] >>> Difference<-abs(risk-relrisk) >>> Difference<-Difference[-c(1:j)] >>> Difference<-append(Diff,Difference) >>> return(Difference) >>> } >>> } >>> >>> >>> Oarabile >>> >> >> ________________________________________________________________________ >> This e-mail has been scanned for all viruses by Star. The >> service is powered by MessageLabs. For more information on a proactive >> anti-virus service working around the clock, around the globe, visit: >> http://www.star.net.uk >> ________________________________________________________________________ >> > > ________________________________________________________________________ > This e-mail has been scanned for all viruses by Star. The > service is powered by MessageLabs. For more information on a proactive > anti-virus service working around the clock, around the globe, visit: > http://www.star.net.uk > ________________________________________________________________________