#' Calculate the distance matrix between training and test dataset or one matrix itself
#'
#' @param x is an object
#' @return y is the output
#' @export
distMatrix <- function(mat.train, itself = TRUE, mat.test = NULL,
n.train, n.test = NULL,
cores = 2, euclidean = TRUE){
# Parallilisation Settings
registerDoParallel(cores=cores)
CL <- makeCluster(cores)
length_x <- ncol(mat.train)
if(itself){
distances <- foreach(i = 1:n.train, .packages = c("tcltk","SMLpractical"), .combine = cbind) %dopar%{
if(!exists("pb")) pb <- tkProgressBar("Progress Distance Matrix", min=0, max=n.train)
x.train <- mat.train[i,]
distances <- matrix(0, nrow=n.train, ncol=1)
for(j in 1:i){
x.test <- mat.train[j,]
distances[j] <- classDist(x.train,x.test,length_x, euclidean = euclidean)
}
progress <- setTkProgressBar(pb, i)
distances
}
stopCluster(CL)
distances <- distances + t(distances)
} else {
distances <- foreach(i = 1:n.train, .packages = c("tcltk","SMLpractical"), .combine = cbind) %dopar%{
if(!exists("pb")) pb <- tkProgressBar("Progress Distance Matrix", min=0, max=n.train)
x.train <- mat.train[i,]
distances <- matrix(0, nrow=n.test, ncol=1)
for(j in 1:n.test){
x.test <- mat.test[j,]
distances[j] <- classDist(x.train,x.test,length_x, euclidean = euclidean)
}
progress <- setTkProgressBar(pb, i)
distances
}
stopCluster(CL)
}
return(distances)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.