Skip to content

lapply with mahalanobis function

2 messages · Mike White, Dimitris Rizopoulos

#
Hi
I am trying to use lapply with a function that requires two list type
variables but I cannot find a way to program it and could not find any hints
under lapply or searching the R-list.  As an example I have used the
mahalanobis function with the iris data. Is there a way to replace the for
loop with the lapply function or similar?

data(iris)
set.seed(0)
sa<-sample(nrow(iris),2)
train<-iris[!(1:nrow(iris) %in% sa),]
test<-iris[sa,1:4]
Sp.data<-split(train[,1:4], train[,"Species"])

cov.mat<-lapply(Sp.data, cov)
centroids<-lapply(Sp.data, function(x) apply(x,2,mean))

## can the for loop be replaced by an lapply function?
result<-list()
for (i in 1:length(Sp.data)){
result[[i]]<-mahalanobis(test, center=centroids[[i]], cov=cov.mat[[i]])
}

result
[[1]]
        135          40
620.9687898   0.6085936

[[2]]
      135        40
 27.61433 104.97892

[[3]]
      135        40
 10.96607 167.81203

Thanks
Mike White
#
you could use mapply(), e.g.,

mapply(mahalanobis, center = centroids, cov = cov.mat, MoreArgs = 
list(x = test))


I hope it helps.

Best,
Dimitris

----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven

Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/(0)16/336899
Fax: +32/(0)16/337015
Web: http://www.med.kuleuven.be/biostat/
     http://www.student.kuleuven.be/~m0390867/dimitris.htm


----- Original Message ----- 
From: "Mike White" <mikewhite.diu at btconnect.com>
To: <R-help at stat.math.ethz.ch>
Sent: Wednesday, April 05, 2006 10:58 AM
Subject: [R] lapply with mahalanobis function
Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm