Skip to content

help with writing function

4 messages · Oarabile Molaodi, Robert Burrows, PIKAL Petr

#
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
#
On Tue, 13 Dec 2005, Oarabile Molaodi wrote:

            
How about

"IED" <-
function(risk){
  n<-length(risk)
Diff<-numeric(n)
for(j in 1:n){
relrisk<-rep(risk[j],n)
Diff[j]<-sum(abs(risk-relrisk)[-j])
}
Diff
}
#
Hi

or use outer

x<-1:10
x<-sample(x)
mat<-outer(x,x,"-") # result with zeroes
matrix(mat[!mat==0],9,9) # get rid of them

will give you a matrix with columns with intended result.

HTH
Petr
On 13 Dec 2005 at 11:53, Robert Burrows wrote:
Date sent:      	Tue, 13 Dec 2005 11:53:00 -0500 (EST)
From:           	Robert Burrows <rbb at nebiometrics.com>
To:             	Oarabile Molaodi <oarabile at stams.strath.ac.uk>
Copies to:      	r-help at stat.math.ethz.ch
Subject:        	Re: [R] help with writing function
Petr Pikal
petr.pikal at precheza.cz
#
Thanks for the help Petr it works,  and all who contributed  managed 
with the  suggested function below as I needed to remove the zeros and 
the upper triangular portion of the matrix.:

IED <- function(risk) {

   n     <- length(risk)
   mrisk <- matrix( rep(risk, n), ncol=n, byrow=TRUE )
   diff  <- abs(risk - mrisk)

   diff[ lower.tri(diff) ]
 }

OR

IED2 <- function(risk){
   o <- abs( outer( risk, risk, FUN="-" ) )
   o[ lower.tri(o) ]
 }


Oarabile
Petr Pikal wrote: