[R] Developing functions

Gabor Grothendieck ggrothendieck at myway.com
Wed Jun 30 22:05:15 CEST 2004



Without trying to understand your code in detail let me just 
assume you are trying to create a matrix, ret, whose i,j-th 
entry is some function, f, of row i of X and row j of X.

In that case this should do it:

	apply(X,1,function(x)apply(X,1,function(y)f(x,y)))


Date:   Wed, 30 Jun 2004 15:28:47 -0300 (ART) 
From:   <daniel at sintesys.com.ar>
To:   <r-help at stat.math.ethz.ch> 
Subject:   [R] Developing functions 

 
Hi,
I´m new in R. I´m working with similarity coefficients for clustering
items. I created one function (coef), to calculate the coefficients from
two pairs of vectors and then, as an example, the function
simple_matching,
taking a data.frame(X) and using coef in a for cicle.
It works, but I believe it is a bad way to do so (I believe the for cicle
is not necessary). Somebody can suggest anything better.
Thanks
Daniel Rozengardt

coef<-function(x1,x2){a<-sum(ifelse(x1==1&x2==1,1,0));
b<-sum(ifelse(x1==1&x2==0,1,0));
c<-sum(ifelse(x1==0&x2==1,1,0));
d<-sum(ifelse(x1==0&x2==0,1,0));
ret<-cbind(a,b,c,d);
ret
}

simple_matching<-function(X) {
ret<-matrix(ncol=dim(X)[1],nrow=dim(X)[1]);
diag(ret)<-1;
for (i in 2:length(X[,1])) {
     for (j in i:length(X[,1])) {
     vec<-coef(X[i-1,],X[j,]);
     result<-(vec[1]+vec[3])/sum(vec);
     ret[i-1,j]<-result;
     ret[j,i-1]<-result}};
ret}




More information about the R-help mailing list