- discriminant.distance<-function(x,type,var.equal=TRUE){
- if(is.data.frame(x)!=TRUE) x<-as.data.frame(x)
- if(is.factor(x$type)!=TRUE) x$type<-factor(x$type)
- library(dplyr)
- n<-nrow(x);m<-ncol(x);k<-length(levels(x$type))
- mu<-matrix(0,nrow = k,ncol = m-1)
- S<-matrix(0,nrow = m-1,ncol = m-1)
- y<-as.matrix(select(x,-type))
- for(j in 1:k){
- a<-select(filter(x,type=="j"),-type)
- mu[j,]<-apply(a,2,mean)
- S<-S+nrow(a)*cov(a)
- }
- S<-S/(n-k)
- d<-matrix(0,nrow = n,ncol = k)
- for(i in 1:n){
- for(j in i:k){
- d[i,j]<-t(y[i,]-mu[j,])%*%solve(S)%*%(y[i,]-mu[j,])
- }
- }
- result<-matrix(0,nrow = 1,ncol = n)
- for(i in 1:n){
- result[i]<-which.min(d[i,])
- }
- result
- }
Error in mu[j, ] : subscript out of bounds
Called from: t(y[i, ] - mu[j, ])
求大神们支招,感激不尽