diff --git a/R/clustering_functions.R b/R/clustering_functions.R index d228b72..680118c 100644 --- a/R/clustering_functions.R +++ b/R/clustering_functions.R @@ -1226,7 +1226,7 @@ Clara_Medoids = function(data, clusters, samples, sample_size, distance_metric = if (clusters > 1) { - dsm = data.frame(medoids_mat$bst_sample_silhouette_matrix) + dsm = data.frame(medoids_mat$silhouette_matrix) colnames(dsm) = c('clusters', 'neighbor_clusters', 'intra_clust_dissim', 'outer_clust_dissim', 'silhouette_widths', 'diameter', 'separation') @@ -1245,12 +1245,12 @@ Clara_Medoids = function(data, clusters, samples, sample_size, distance_metric = medoids = medoids_mat$medoids, medoid_indices = as.vector(medoids_mat$medoid_indices) + 1, sample_indices = as.vector(medoids_mat$sample_indices) + 1, - best_dissimilarity = medoids_mat$bst_dissimilarity, + best_dissimilarity = medoids_mat$best_dissimilarity, clusters = as.vector(medoids_mat$clusters) + 1, silhouette_matrix = dsm, fuzzy_probs = medoids_mat$fuzzy_probs, clustering_stats = cs, - dissimilarity_matrix = medoids_mat$bst_sample_dissimilarity_matrix, + dissimilarity_matrix = medoids_mat$dissimilarity_matrix, distance_metric = distance_metric), class = c("MedoidsCluster", "cluster medoids silhouette"))) } diff --git a/inst/include/ClusterRHeader.h b/inst/include/ClusterRHeader.h index 5abb0c6..c2b9569 100644 --- a/inst/include/ClusterRHeader.h +++ b/inst/include/ClusterRHeader.h @@ -818,9 +818,13 @@ namespace clustR { fuzzy_mat.row(i) = norm_fuzzy(arma::conv_to< arma::rowvec >::from(lst_fuzzy_out.row(i)), eps); } - return Rcpp::List::create(Rcpp::Named("clusters") = lst_out, Rcpp::Named("fuzzy_clusters") = fuzzy_mat, Rcpp::Named("centers") = centers_out, Rcpp::Named("total_SSE") = tmp_sse, - - Rcpp::Named("best_initialization") = end_init, Rcpp::Named("WCSS_per_cluster") = bst_WCSS, Rcpp::Named("obs_per_cluster") = bst_obs); + return Rcpp::List::create(Rcpp::Named("clusters") = lst_out, + Rcpp::Named("fuzzy_clusters") = fuzzy_mat, + Rcpp::Named("centers") = centers_out, + Rcpp::Named("total_SSE") = tmp_sse, + Rcpp::Named("best_initialization") = end_init, + Rcpp::Named("WCSS_per_cluster") = bst_WCSS, + Rcpp::Named("obs_per_cluster") = bst_obs); } else { @@ -2630,7 +2634,6 @@ namespace clustR { // Rcpp::List ClusterMedoids(arma::mat& data, int clusters, std::string method, double minkowski_p = 1.0, int threads = 1, bool verbose = false, bool swap_phase = false, - bool fuzzy = false, int seed = 1) { #ifdef _OPENMP @@ -2885,16 +2888,18 @@ namespace clustR { double end_cost_vec_scalar = arma::accu(end_cost_vec); - return Rcpp::List::create(Rcpp::Named("medoids") = end_idxs, Rcpp::Named("cost") = end_cost_vec_scalar, Rcpp::Named("dissimilarity_matrix") = data, - - Rcpp::Named("clusters") = end_indices_vec, Rcpp::Named("end_cost_vec") = end_cost_vec, Rcpp::Named("silhouette_matrix") = befout_silhouette_matrix, - - Rcpp::Named("fuzzy_probs") = fuz_out, Rcpp::Named("clustering_stats") = befout_clustering_stats, Rcpp::Named("flag_dissim_mat") = flag_dissim_mat); + return Rcpp::List::create(Rcpp::Named("medoids") = end_idxs, + Rcpp::Named("cost") = end_cost_vec_scalar, + Rcpp::Named("dissimilarity_matrix") = data, + Rcpp::Named("clusters") = end_indices_vec, + Rcpp::Named("end_cost_vec") = end_cost_vec, + Rcpp::Named("silhouette_matrix") = befout_silhouette_matrix, + Rcpp::Named("fuzzy_probs") = fuz_out, + Rcpp::Named("clustering_stats") = befout_clustering_stats, + Rcpp::Named("flag_dissim_mat") = flag_dissim_mat); } - - // calculate global dissimilarities for claraMedoids // the function can handle missing values by using pair-wise deletion // @@ -3088,9 +3093,9 @@ namespace clustR { Rcpp::List clM_sblist = ClusterMedoids(tmp_dat, clusters, method, minkowski_p, threads, false, swap_phase, false); - double local_dissim = Rcpp::as (clM_sblist[1]); + double local_dissim = Rcpp::as (clM_sblist["cost"]); - arma::uvec local_medoids = Rcpp::as (clM_sblist[0]); + arma::uvec local_medoids = Rcpp::as (clM_sblist["medoids"]); arma::mat tmp_glob = dissim_MEDOIDS(data, method, copy_dat.rows(local_medoids), minkowski_p , threads, 1.0e-6); // use all data to calculate global dissimilarity @@ -3150,13 +3155,15 @@ namespace clustR { fuz_st_mat = fuz_st_mat.t(); - return Rcpp::List::create(Rcpp::Named("medoids") = subs_meds, Rcpp::Named("bst_dissimilarity") = dism, Rcpp::Named("medoid_indices") = out_medoid, - - Rcpp::Named("sample_indices") = clr_split_out_rowvec, Rcpp::Named("clusters") = hard_clust, - - Rcpp::Named("bst_sample_silhouette_matrix") = bst_sample_silh_mat, Rcpp::Named("fuzzy_probs") = fuz_and_stats_mt, - - Rcpp::Named("clustering_stats") = fuz_st_mat, Rcpp::Named("bst_sample_dissimilarity_matrix") = bst_sample_dissm_mat); + return Rcpp::List::create(Rcpp::Named("medoids") = subs_meds, + Rcpp::Named("best_dissimilarity") = dism, + Rcpp::Named("medoid_indices") = out_medoid, + Rcpp::Named("sample_indices") = clr_split_out_rowvec, + Rcpp::Named("clusters") = hard_clust, + Rcpp::Named("silhouette_matrix") = bst_sample_silh_mat, + Rcpp::Named("fuzzy_probs") = fuz_and_stats_mt, + Rcpp::Named("clustering_stats") = fuz_st_mat, + Rcpp::Named("dissimilarity_matrix") = bst_sample_dissm_mat); } @@ -3211,7 +3218,7 @@ namespace clustR { Rcpp::List split_rcpp_lst(Rcpp::List lst) { - arma::mat silh_mat = Rcpp::as (lst[5]); + arma::mat silh_mat = Rcpp::as (lst["silhouette_matrix"]); arma::vec tmp_clust = arma::conv_to< arma::vec >::from(silh_mat.col(0));