Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/build/partial.rdb and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/build/partial.rdb differ diff -Nru cluster-2.1.0/debian/changelog cluster-2.1.2/debian/changelog --- cluster-2.1.0/debian/changelog 2020-04-03 17:43:02.000000000 +0000 +++ cluster-2.1.2/debian/changelog 2021-05-01 16:07:00.000000000 +0000 @@ -1,8 +1,28 @@ -cluster (2.1.0-2bionic0) bionic; urgency=medium +cluster (2.1.2-1.1804.0) bionic; urgency=medium - * Compilation for Ubuntu 18.04.4 LTS + * Compilation for Ubuntu 18.04.5 LTS + * Remove dependency for R 4.0.0 for backports in Ubuntu + * debian/control, debian/rules, debian/compat: revert to a version of + debheler <= 10 - -- Michael Rutter Fri, 03 Apr 2020 17:43:02 +0000 + -- Michael Rutter Sat, 01 May 2021 16:07:00 +0000 + +cluster (2.1.2-1) experimental; urgency=medium + + * New upstream release (to experimental during freeze) + + -- Dirk Eddelbuettel Sat, 24 Apr 2021 16:15:56 -0500 + +cluster (2.1.1-1) unstable; urgency=medium + + * New upstream release + + * debian/control: Set Build-Depends: to current R version + * debian/control: Set Standards-Version: to current version + * debian/control: Switch to virtual debhelper-compat (= 11) + * debian/compat: Removed + + -- Dirk Eddelbuettel Sun, 14 Feb 2021 20:05:41 -0600 cluster (2.1.0-2) unstable; urgency=medium diff -Nru cluster-2.1.0/debian/compat cluster-2.1.2/debian/compat --- cluster-2.1.0/debian/compat 2018-04-28 16:30:13.000000000 +0000 +++ cluster-2.1.2/debian/compat 2021-05-01 16:07:00.000000000 +0000 @@ -1 +1 @@ -9 +10 diff -Nru cluster-2.1.0/debian/control cluster-2.1.2/debian/control --- cluster-2.1.0/debian/control 2019-08-16 21:46:33.000000000 +0000 +++ cluster-2.1.2/debian/control 2021-05-01 16:07:00.000000000 +0000 @@ -2,8 +2,8 @@ Section: gnu-r Priority: optional Maintainer: Dirk Eddelbuettel -Build-Depends: debhelper (>= 7.0.0), r-base-dev (>= 3.6.1), dh-r -Standards-Version: 4.4.0 +Build-Depends: , r-base-dev, dh-r, dh-r +Standards-Version: 4.5.1 Vcs-Browser: https://salsa.debian.org/edd/r-cran-cluster Vcs-Git: https://salsa.debian.org/edd/r-cran-cluster.git Homepage: https://cran.r-project.org/package=cluster diff -Nru cluster-2.1.0/DESCRIPTION cluster-2.1.2/DESCRIPTION --- cluster-2.1.0/DESCRIPTION 2019-06-19 11:10:03.000000000 +0000 +++ cluster-2.1.2/DESCRIPTION 2021-04-17 08:50:02.000000000 +0000 @@ -1,6 +1,6 @@ Package: cluster -Version: 2.1.0 -Date: 2019-06-07 +Version: 2.1.2 +Date: 2021-04-16 Priority: recommended Title: "Finding Groups in Data": Cluster Analysis Extended Rousseeuw et al. @@ -26,7 +26,7 @@ ORCID = "0000-0001-9143-4880")) ,person("Keefe", "Murphy", role="ctb", comment = "volume.ellipsoid({d >= 3})") ) -Depends: R (>= 3.3.0) +Depends: R (>= 3.4.0) Imports: graphics, grDevices, stats, utils Suggests: MASS, Matrix SuggestsNote: MASS: two examples using cov.rob() and mvrnorm(); Matrix @@ -36,9 +36,9 @@ ByteCompile: yes BuildResaveData: no License: GPL (>= 2) -URL: https://svn.r-project.org/R-packages/trunk/cluster +URL: https://svn.r-project.org/R-packages/trunk/cluster/ NeedsCompilation: yes -Packaged: 2019-06-19 08:21:30 UTC; maechler +Packaged: 2021-04-16 13:59:34 UTC; maechler Author: Martin Maechler [aut, cre] (), Peter Rousseeuw [aut] (Fortran original, ), @@ -54,4 +54,4 @@ ), Keefe Murphy [ctb] (volume.ellipsoid({d >= 3})) Repository: CRAN -Date/Publication: 2019-06-19 11:10:03 UTC +Date/Publication: 2021-04-17 08:50:02 UTC diff -Nru cluster-2.1.0/inst/CITATION cluster-2.1.2/inst/CITATION --- cluster-2.1.0/inst/CITATION 2015-01-22 17:22:08.000000000 +0000 +++ cluster-2.1.2/inst/CITATION 2020-04-30 11:40:04.000000000 +0000 @@ -1,8 +1,12 @@ ## -*- R -*- +## FIXME: Change to using 'bibentry' see e.g., .../copula/inst/CITATION ! + citHeader("To cite the R package 'cluster' in publications use:") +PKG <- "cluster" year <- sub(".*(2[[:digit:]]{3})-.*", "\\1", meta$Date) vers <- paste("R package version", meta$Version) +url <- paste0("https://CRAN.R-project.org/package=", PKG) citEntry(entry = "Manual", title = "cluster: Cluster Analysis Basics and Extensions", @@ -16,11 +20,12 @@ person("Kurt", "Hornik", role=c("trl","ctb"), comment = "R port; and much initial help file fixing, 1998--2000") ), year = year, + url = url, note = paste(vers,"---", "For new features, see the 'Changelog' file (in the package source)"), ## FIXME: rather give the URL to the manual on CRAN ??? ## url = "http://stat.ethz.ch/CRAN/src/contrib/........", - textVersion = paste( - "Maechler, M., Rousseeuw, P., Struyf, A., Hubert, M., Hornik, K.(", - year, "). cluster: Cluster Analysis Basics and Extensions. ", - vers, ".", sep="")) + textVersion = paste0( + "Maechler, M., Rousseeuw, P., Struyf, A., Hubert, M., Hornik, K.(", + year, "). cluster: Cluster Analysis Basics and Extensions. ", vers, ".") + ) diff -Nru cluster-2.1.0/inst/NEWS.Rd cluster-2.1.2/inst/NEWS.Rd --- cluster-2.1.0/inst/NEWS.Rd 2019-06-14 07:17:03.000000000 +0000 +++ cluster-2.1.2/inst/NEWS.Rd 2021-04-16 13:57:13.000000000 +0000 @@ -6,6 +6,36 @@ \newcommand{\CRANpkg}{\href{http://CRAN.R-project.org/package=#1}{\pkg{#1}}} %% NB: The date (yyyy-mm-dd) is the "Packaged:" date in ../DESCRIPTION +\section{Changes in version 2.1.2 (2021-04-16, svn r7956)}{ + \subsection{New Features}{ + \itemize{ + \item Updated the Italian translations (by Daniele Medri), the + French (by Philippe Grosjean) and the German (by Detlef Steuer). + New Lithuanian translations by Gabriele Stupuriene & Rimantas Zakauskas. + } + } +} + +\section{Changes in version 2.1.1 (2021-02-11, svn r7925)}{ + \subsection{New Features}{ + \itemize{ + \item Added Italian translations from Daniele Medri, and updated the + French ones from Philippe Grosjean. + + \item \code{clara()} gains a \code{cluster.only} argument, entirely + \dQuote{in parallel} to \code{pam()}. + + \item the \code{silhouette()} method for \code{clara} now allows + \code{full} to be a number in [0,1] instead of just a logical and it gains + gains new optional argument \code{subset} to specify the indices of + observations for which silhouette values shold be computed. + + \item Faster \code{pam()} - \sQuote{fasterPAM} from Erich Schubert. + New optional arguments \code{medoids = "random"}, \code{nstart}, and + \code{variant}, notably \code{variant = "faster"}. + } + } +} \section{Changes in version 2.1.0 (2019-06-07, svn r7674)}{ \subsection{Bug Fixes}{ @@ -452,4 +482,3 @@ } } } - Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/de/LC_MESSAGES/cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/de/LC_MESSAGES/cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/de/LC_MESSAGES/R-cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/de/LC_MESSAGES/R-cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/en@quot/LC_MESSAGES/cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/en@quot/LC_MESSAGES/cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/en@quot/LC_MESSAGES/R-cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/en@quot/LC_MESSAGES/R-cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/fr/LC_MESSAGES/cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/fr/LC_MESSAGES/cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/fr/LC_MESSAGES/R-cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/fr/LC_MESSAGES/R-cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/it/LC_MESSAGES/cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/it/LC_MESSAGES/cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/it/LC_MESSAGES/R-cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/it/LC_MESSAGES/R-cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/ko/LC_MESSAGES/cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/ko/LC_MESSAGES/cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/ko/LC_MESSAGES/R-cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/ko/LC_MESSAGES/R-cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/lt/LC_MESSAGES/cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/lt/LC_MESSAGES/cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/lt/LC_MESSAGES/R-cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/lt/LC_MESSAGES/R-cluster.mo differ Binary files /tmp/tmpkywrp_zi/sdEVnyACzA/cluster-2.1.0/inst/po/pl/LC_MESSAGES/R-cluster.mo and /tmp/tmpkywrp_zi/KGMtk7smT2/cluster-2.1.2/inst/po/pl/LC_MESSAGES/R-cluster.mo differ diff -Nru cluster-2.1.0/man/clara.Rd cluster-2.1.2/man/clara.Rd --- cluster-2.1.0/man/clara.Rd 2019-06-19 08:21:15.000000000 +0000 +++ cluster-2.1.2/man/clara.Rd 2020-04-30 11:40:04.000000000 +0000 @@ -2,12 +2,12 @@ \alias{clara} \title{Clustering Large Applications} \description{ - Computes a \code{"clara"} object, a list representing a clustering of - the data into \code{k} clusters. + Computes a \code{"clara"} object, a \code{\link{list}} representing a + clustering of the data into \code{k} clusters. } \usage{ clara(x, k, metric = c("euclidean", "manhattan", "jaccard"), - stand = FALSE, samples = 5, + stand = FALSE, cluster.only = FALSE, samples = 5, sampsize = min(n, 40 + 2 * k), trace = 0, medoids.x = TRUE, keep.data = medoids.x, rngR = FALSE, pamLike = FALSE, correct.d = TRUE) } @@ -34,6 +34,8 @@ variable's mean value and dividing by the variable's mean absolute deviation. } + \item{cluster.only}{logical; if true, only the clustering will be + computed and returned, see details.} \item{samples}{integer, say \eqn{N}, the number of samples to be drawn from the dataset. The default, \code{N = 5}, is rather small for historical (and now back compatibility) reasons and we \emph{recommend to set @@ -41,7 +43,7 @@ } \item{sampsize}{integer, say \eqn{j}, the number of observations in each sample. \code{sampsize} should be higher than the number of clusters - (\code{k}) and at most the number of observations (n = + (\code{k}) and at most the number of observations (\eqn{n =} \code{nrow(x)}). While computational effort is proportional to \eqn{j^2}, see note below, it may still be advisable to set \eqn{j = }\code{sampsize} to a \emph{larger} value than the (historical) default.} @@ -82,8 +84,12 @@ specifies \code{correct.d}.} } \value{ + If \code{cluster.only} is false (as by default), an object of class \code{"clara"} representing the clustering. See \code{\link{clara.object}} for details. + + If \code{cluster.only} is true, the result is the "clustering", an + integer vector of length \eqn{n} with entries from \code{1:k}. } \details{ \code{clara} is fully described in chapter 3 of Kaufman and Rousseeuw (1990). @@ -107,6 +113,11 @@ Each sub-dataset is forced to contain the medoids obtained from the best sub-dataset until then. Randomly drawn observations are added to this set until \code{sampsize} has been reached. + + When \code{cluster.only} is true, the result is simply a (possibly + named) integer vector specifying the clustering, i.e.,\cr + \code{clara(x,k, cluster.only=TRUE)} is the same as \cr + \code{clara(x,k)$clustering} but computed more efficiently. } \note{ %% mostly by Martin Maechler : @@ -158,6 +169,11 @@ clara(x, 2, samples=50, pamLike = TRUE)[-8]) plot(clarax) +## cluster.only = TRUE -- save some memory/time : +clclus <- clara(x, 2, samples=50, cluster.only = TRUE) +stopifnot(identical(clclus, clarax$clustering)) + + ## 'xclara' is an artificial data set with 3 clusters of 1000 bivariate ## objects each. data(xclara) diff -Nru cluster-2.1.0/man/pam.Rd cluster-2.1.2/man/pam.Rd --- cluster-2.1.0/man/pam.Rd 2019-04-01 16:09:16.000000000 +0000 +++ cluster-2.1.2/man/pam.Rd 2021-01-30 21:27:20.000000000 +0000 @@ -8,10 +8,13 @@ \usage{ pam(x, k, diss = inherits(x, "dist"), metric = c("euclidean", "manhattan"), %% FIXME: add "jaccard" - medoids = NULL, stand = FALSE, cluster.only = FALSE, + medoids = if(is.numeric(nstart)) "random", + nstart = if(variant == "faster") 1 else NA, + stand = FALSE, cluster.only = FALSE, do.swap = TRUE, keep.diss = !diss && !cluster.only && n < 100, keep.data = !diss && !cluster.only, + variant = c("original", "o_1", "o_2", "f_3", "f_4", "f_5", "faster"), pamonce = FALSE, trace.lev = 0) } \arguments{ @@ -52,6 +55,9 @@ \item{medoids}{NULL (default) or length-\code{k} vector of integer indices (in \code{1:n}) specifying initial medoids instead of using the \sQuote{\emph{build}} algorithm.} + \item{nstart}{used only when \code{medoids = "random"}: specifies the + \emph{number} of random \dQuote{starts}; this argument corresponds to + the one of \code{\link{kmeans}()} (from \R's package \pkg{stats}).} \item{stand}{logical; if true, the measurements in \code{x} are standardized before calculating the dissimilarities. Measurements are standardized for each variable (column), by subtracting the @@ -69,9 +75,14 @@ and/or input data \code{x} should be kept in the result. Setting these to \code{FALSE} can give much smaller results and hence even save memory allocation \emph{time}.} - \item{pamonce}{logical or integer in \code{0:5} specifying algorithmic + \item{pamonce}{logical or integer in \code{0:6} specifying algorithmic short cuts as proposed by Reynolds et al. (2006), and - Schubert and Rousseeuw (2019) see below.} + Schubert and Rousseeuw (2019, 2021) see below.} + \item{variant}{a \code{\link{character}} string denoting the variant of + PAM algorithm to use; a more self-documenting version of \code{pamonce} + which should be used preferably; note that \code{"faster"} not only + uses \code{pamonce = 6} but also \code{nstart = 1} and hence + \code{medoids = "random"} by default.} \item{trace.lev}{integer specifying a trace level for printing diagnostics during the build and swap phase of the algorithm. Default \code{0} does not print anything; higher values print @@ -111,10 +122,10 @@ looks for a good initial set of medoids (this is called the \bold{build} phase). Then it finds a local minimum for the objective function, that is, a solution such that there is no single - switch of an observation with a medoid that will decrease the - objective (this is called the \bold{swap} phase). + switch of an observation with a medoid (i.e. a \sQuote{swap}) that will + decrease the objective (this is called the \bold{swap} phase). - When the \code{medoids} are specified, their order does \emph{not} + When the \code{medoids} are specified (or randomly generated), their order does \emph{not} matter; in general, the algorithms have been designed to not depend on the order of the observations. @@ -129,7 +140,7 @@ and \code{pamonce = 2} additionally implements the second proposal as well. % FIXME more details - The key ideas of FastPAM (Schubert and Rousseeuw, 2019) are implemented + The key ideas of \sQuote{FastPAM} (Schubert and Rousseeuw, 2019) are implemented except for the linear approximate build as follows: \describe{ \item{\code{pamonce = 3}:}{ @@ -138,9 +149,25 @@ \item{\code{pamonce = 4}:}{ additionally allows executing multiple swaps per iteration, usually reducing the number of iterations.} \item{\code{pamonce = 5}:}{ adds minor optimizations copied from the - \code{pamonce = 2} approach, and is expected to be the fastest - variant.} + \code{pamonce = 2} approach, and is expected to be the fastest of the + \sQuote{FastPam} variants included.} } + \sQuote{FasterPAM} (Schubert and Rousseeuw, 2021) is implemented via + \describe{ + \item{\code{pamonce = 6}:}{execute each swap which improves results + immediately, and hence typically multiple swaps per iteration; + this swapping algorithm runs in \eqn{O(n^2)} rather than + \eqn{O(n(n-k)k)} time which is much faster for all but small \eqn{k}.} + } + + In addition, \sQuote{FasterPAM} uses \emph{random} initialization of the + medoids (instead of the \sQuote{\emph{build}} phase) to avoid the + \eqn{O(n^2 k)} initialization cost of the build algorithm. In particular + for large k, this yields a much faster algorithm, while preserving a + similar result quality. + + One may decide to use \emph{repeated} random initialization by setting + \code{nstart > 1}.%% FIXME(also above) THOUGH we have said the *order* should really not matter. } \note{ For large datasets, \code{pam} may need too much memory or too much @@ -157,6 +184,9 @@ \cr Matthias Studer, Univ.Geneva provided the \code{pamonce} (\code{1} and \code{2}) implementation. + \cr + Erich Schubert, TU Dortmund contributed the \code{pamonce} (\code{3} to \code{6}) + implementation. } \references{ %% the pamonce=1,2 options : @@ -170,7 +200,13 @@ Erich Schubert and Peter J. Rousseeuw (2019) Faster k-Medoids Clustering: Improving the PAM, CLARA, and CLARANS Algorithms; - Preprint, (\url{https://arxiv.org/abs/1810.05691}). + SISAP 2020, 171--187. \doi{10.1007/978-3-030-32047-8_16}. + +%% improvements to FastPAM, and FasterPAM: + Erich Schubert and Peter J. Rousseeuw (2021) + Fast and Eager k-Medoids Clustering: + O(k) Runtime Improvement of the PAM, CLARA, and CLARANS Algorithms; + Preprint, to appear in Information Systems (\url{https://arxiv.org/abs/2008.05171}). } \seealso{ \code{\link{agnes}} for background and references; diff -Nru cluster-2.1.0/man/silhouette.Rd cluster-2.1.2/man/silhouette.Rd --- cluster-2.1.0/man/silhouette.Rd 2017-07-18 21:18:39.000000000 +0000 +++ cluster-2.1.2/man/silhouette.Rd 2020-05-07 13:44:01.000000000 +0000 @@ -16,7 +16,7 @@ silhouette(x, \dots) \method{silhouette}{default} (x, dist, dmatrix, \dots) \method{silhouette}{partition}(x, \dots) -\method{silhouette}{clara}(x, full = FALSE, \dots) +\method{silhouette}{clara}(x, full = FALSE, subset = NULL, \dots) sortSilhouette(object, \dots) \method{summary}{silhouette}(object, FUN = mean, \dots) @@ -36,10 +36,15 @@ \code{dmatrix} must be.} \item{dmatrix}{a symmetric dissimilarity matrix (\eqn{n \times n}{n x n}), specified instead of \code{dist}, which can be more efficient.} - \item{full}{logical specifying if a \emph{full} silhouette should be - computed for \code{\link{clara}} object. Note that this requires - \eqn{O(n^2)} memory, since the full dissimilarity (see - \code{\link{daisy}}) is needed internally.} + \item{full}{logical or number in \eqn{[0,1]} specifying if a \emph{full} + silhouette should be computed for \code{\link{clara}} object. When a + number, say \eqn{f}, for a random \code{\link{sample.int}(n, size = f*n)} + of the data the silhouette values are computed. + This requires \eqn{O((f*n)^2)} memory, since the full dissimilarity of + the (sub)sample (see \code{\link{daisy}}) is needed internally.} + \item{subset}{a subset from \code{1:n}, specified instead of \code{full} + to specify the indices of the observations to be used for the silhouette + computations.} \item{object}{an object of class \code{silhouette}.} \item{\dots}{further arguments passed to and from methods.} \item{FUN}{function used to summarize silhouette widths.} diff -Nru cluster-2.1.0/MD5 cluster-2.1.2/MD5 --- cluster-2.1.0/MD5 2019-06-19 11:10:03.000000000 +0000 +++ cluster-2.1.2/MD5 2021-04-17 08:50:02.000000000 +0000 @@ -1,11 +1,11 @@ 6da12079996ad0aa5be2f30ee7a9e457 *ChangeLog -8872b411b2ca48c4da38b5496f37a88a *DESCRIPTION +48f8b9a6277214884eb6dd5f987dc9ac *DESCRIPTION 824c6b9820b7fc963b52b185b8284481 *INDEX ca2be9171db9bc45a268f08f5edf9539 *NAMESPACE 8de82c7d42bd4a27c27c25462ae2a307 *PORTING 5025b8448cdc0d97d545b677c6cbdd5b *R/0aaa.R 9a36ddc2124718c79ca517ff09b7cdc0 *R/agnes.q -e1e9efce2aeb4a81809d557911b0c9db *R/clara.q +07cab647a44187a0a3b09c08db82b842 *R/clara.q 85821d54da55bfb93cf9acd1f8bbcc3a *R/clusGap.R a6de142daacb2b59b3f4426bafc30244 *R/clusGapGen.R e93355a6f7ad8d8486e6db4db52200a9 *R/coef.R @@ -15,13 +15,13 @@ 86a134c01b58fae094b8b064c4af3d60 *R/fanny.q ff1cec6103f81407f16981ffd44d1fd5 *R/internal.R 6a2322a6a4344438437bdc60ab1067fa *R/mona.q -4e789a76352d94a8f74ca60c8394ab6a *R/pam.q +ad6f634d40cf64708e0b4c0e256ea475 *R/pam.q 4202616d1b9da174d3870a9866a467b9 *R/plothier.q f7f2f0ab06414c020a2f22a7914d82b9 *R/plotpart.q -ac6ea20501b14230d4f2fcf97abda367 *R/silhouette.R +071ad90643db30c3b9647c8c6dea0c16 *R/silhouette.R f1d53c5f24897b5ab0e6014be9be7844 *R/zzz.R -74315cfbf492da8e8b2c7687ecbdc750 *README -265d36817b510dcb404a8aeb769d7dfd *build/partial.rdb +0d5b196c8cf0ac67c43144fa14ddf275 *README +c4a4fefe538fe785958ec8d0f9f34e91 *build/partial.rdb ac189f8e6e1314c01a700f6a31ee4506 *data/agriculture.tab 1046f7a750dbbac2724fd910aff561e7 *data/animals.tab c8f60e65b0356698f6b08c23c07e2a94 *data/chorSub.rda @@ -31,16 +31,21 @@ eda904e011e79ea5a25602125d558d04 *data/ruspini.tab e816e6c67444107ab47ff3bf2f6023f2 *data/votes.repub.tab be46f45035b177b940393db459789282 *data/xclara.rda -2d1d8b81f92e1e97b282390e90941497 *inst/CITATION -b3c2cffc49197619d987992da637178e *inst/NEWS.Rd -bfd0bc51a62786ea02f5ce8197adffa7 *inst/po/de/LC_MESSAGES/R-cluster.mo -be3ce6c5e3a99c4769b31c674953d202 *inst/po/de/LC_MESSAGES/cluster.mo -a56541211dac9565caf5115dfb1b2038 *inst/po/en@quot/LC_MESSAGES/R-cluster.mo -9ad4e319bf7879130579cec25b007948 *inst/po/en@quot/LC_MESSAGES/cluster.mo -b67eda048b99b3c480521223434e0468 *inst/po/fr/LC_MESSAGES/R-cluster.mo -443e95f6bf0021d9fddc51795d050292 *inst/po/ko/LC_MESSAGES/R-cluster.mo -bf74a2bf26d5a8bbed974ddb2c96c565 *inst/po/ko/LC_MESSAGES/cluster.mo -670a90c8ba5e7b207a0a92e115e0e84a *inst/po/pl/LC_MESSAGES/R-cluster.mo +29d8f5231ee2ce87ab713a6a75cb9e5f *inst/CITATION +aa5da9e16b26370bfed051674a092b2e *inst/NEWS.Rd +8c016f4475b0a50ab3862b821065bcff *inst/po/de/LC_MESSAGES/R-cluster.mo +2ea75383dd4fa4a009b55dea63dbde24 *inst/po/de/LC_MESSAGES/cluster.mo +ce20503b1d2c353127425f6c8579192f *inst/po/en@quot/LC_MESSAGES/R-cluster.mo +c88c780de8f177164332856006086d25 *inst/po/en@quot/LC_MESSAGES/cluster.mo +ad357e74e543aaff82ca7b0b0f74fa68 *inst/po/fr/LC_MESSAGES/R-cluster.mo +0f1e6825d9f4d929a4c7498117ef7db1 *inst/po/fr/LC_MESSAGES/cluster.mo +82634ef9907c55c2ef3479c593faab6d *inst/po/it/LC_MESSAGES/R-cluster.mo +ea65ee7c4b7e355625c73bde508aace2 *inst/po/it/LC_MESSAGES/cluster.mo +25285dfff1fc041a6f04a20bfaa4f2c2 *inst/po/ko/LC_MESSAGES/R-cluster.mo +267db8d66a7fad4e18c03e82f11ca1cb *inst/po/ko/LC_MESSAGES/cluster.mo +883be71b69e9398b49c3d7b77b8d385e *inst/po/lt/LC_MESSAGES/R-cluster.mo +76bb866ebd7c200b776c93a4a08e0a44 *inst/po/lt/LC_MESSAGES/cluster.mo +637e48432ffbf0d87e7b193733915c3a *inst/po/pl/LC_MESSAGES/R-cluster.mo fb8ab3d3e7dbe2dcdf9462fbd46d9917 *inst/test-tools.R 29bc302e877a84517f5926260bbf3f96 *man/agnes.Rd 29d26f3fb10f3462291c10d441865e71 *man/agnes.object.Rd @@ -48,7 +53,7 @@ ba26ba311f46bfec382d98fbc1f00e15 *man/animals.Rd 80586a34dc1e14f840ebae455aeb9736 *man/bannerplot.Rd 0b1033484c0b66ff9451427930e92987 *man/chorSub.Rd -ef3bfda0b97e29b76a423be6966f6252 *man/clara.Rd +39790b8266af4f652e22da83a5af6397 *man/clara.Rd b86f299b6994b98e2112843516f3108a *man/clara.object.Rd 249613cb2696ca593c01719a44496590 *man/clusGap.Rd 1dee90909b5f299ecea5ccb9384ed9ac *man/clusplot.default.Rd @@ -65,7 +70,7 @@ f9c1ca445301e6c2ed69986d96ab5676 *man/lower.to.upper.tri.inds.Rd b75d0f093fc09421ee5d5d12ddd7fcc1 *man/mona.Rd 546379a2e048bf7ef7a69aff87f4ca50 *man/mona.object.Rd -487fc9a6e03d886ba1e99bbea09c4517 *man/pam.Rd +fc71f8c10ab81679cb027d58d3940693 *man/pam.Rd 21795cc8b4bd9b63b24f44e5ffeeccb2 *man/pam.object.Rd 351d76eba52f0dff7f468b04c4d52fcd *man/partition.object.Rd 40fe00964d4215ce1b2390e8f18e9dc0 *man/plantTraits.Rd @@ -84,7 +89,7 @@ 0dcf3dd3c5afbb216939ca9158c32192 *man/print.mona.Rd b1c1625935a5c22d81aa2e73d3b80457 *man/print.pam.Rd 7cd999938af26fb5c97e4d45ab9ea982 *man/ruspini.Rd -6ad2387b68543d1dc634ab9257f987fb *man/silhouette.Rd +6acc93ed47c1218734a8c10aa52ba9b3 *man/silhouette.Rd 8beea8b2090f7e91d0a0b69ec2013718 *man/sizeDiss.Rd 0df193ca0559bef700c60048d76d0516 *man/summary.agnes.Rd f52e4e7889d246480ead5358d1771d58 *man/summary.clara.Rd @@ -95,30 +100,35 @@ d030948d78b63ac02577e92e6bd02fbf *man/volume.ellipsoid.Rd 0510d0816550f6d3c258652912053a1d *man/votes.repub.Rd 0ebf97dd08eb6f33180418891f1cbbdb *man/xclara.Rd -bb2efd38c18e95860753233bdb8484b1 *po/R-cluster.pot -34ddd859c7d1aef8e72608cee2fdd81a *po/R-de.po +a9cf9ab6538ff780a7025e8f0ac5ef47 *po/R-cluster.pot +c5207b887ae6bf4c37f725ad6723b86c *po/R-de.po e9b5293e63746638be1f3570dbeb4fe3 *po/R-en@quot.po -8d93f676bad944d685834dea6cf969cf *po/R-fr.po -d86baa23f82be8f6ac7ffd9d3f084150 *po/R-ko.po -016adbe973d691c77060973c4c4be594 *po/R-pl.po -3475fd30b58e36b81d6b0a45f5408dcf *po/cluster.pot -ecc678170701fb328651c672bf7cb9e6 *po/de.po -3eb57b26cbc2e7babd9cf816f2b517d8 *po/ko.po -86e308f92ccc269bcb494de5ac0b2481 *po/update-me.sh +c7756534b86bf7bfec444829a2712f70 *po/R-fr.po +13b4f0d8424c2a8f0ff32ef83369b3be *po/R-it.po +fbde69de7e2873014af2d1f1cd7d8ce2 *po/R-ko.po +77241b8e31dff9325274e60923e9755d *po/R-lt.po +23e4554ebc8438a475c14cbe47339ffe *po/R-pl.po +b2b5034def7c70717f62d374784b0c16 *po/cluster.pot +45803ff36e74500a0da41c09b0d43757 *po/de.po +9989513cc0477d082ab4cb8b2029f67e *po/fr.po +8e801cb9f9656267990839510473d98b *po/it.po +3f32b18576c5075747167bc68aa5afb7 *po/ko.po +a5b9736a19f66a24b55592af4c95668f *po/lt.po +e91a576625162bd539d534288763211e *po/update-me.sh e93bebd2b125848e9f8dfcbf0f705956 *src/clara.c 304d9fd1f9b4df3f16149b8aeadf7330 *src/cluster.h c323dd9c80537ef46976cdd47c9056e6 *src/daisy.f 20241ba8aa6ae6296c5acec015f1f906 *src/dysta.f f974c4dae4c6b2398bf32648d6671f46 *src/fanny.c 23cea00d2feab57a92e8c2393c7f4b8a *src/ind_2.h -d1b66d40049abd7161731a0a02e1a381 *src/init.c +6a8138330c0276527d4b59f8ecfdef76 *src/init.c 93dff342c334fec621bda03dd76abc6f *src/mona.c -d6f0c229f9914351e49fd84cbbb80b96 *src/pam.c -6f11dc74b1636e3ac848563d570f0030 *src/sildist.c +b1c1ce495aa7d7d9f6714789e69341fe *src/pam.c +a1171c691cb59eac9a05e50fb41ac1f4 *src/sildist.c f42f05132aaf001ddd333e3e109692e0 *src/spannel.c 420078424e521d6279a9a14127ec61cb *src/twins.c -ed02b9443ca7d93b7e71290d81016b41 *tests/agnes-ex.R -1741b34a32d36470ba193c7129f338b8 *tests/agnes-ex.Rout.save +547f9b2a8e29c1afc0668c50574d43dd *tests/agnes-ex.R +9835fc2e1a472754fce0f6106213c044 *tests/agnes-ex.Rout.save f21e11b8d426840d72a35aeb1c9f2c5c *tests/clara-NAs.R 5c8c511ac9cffb74ce778388daa7ebcb *tests/clara-NAs.Rout.save 39e1daac5198726c9d921a5d5bb122cb *tests/clara-ex.R @@ -136,8 +146,8 @@ 52b341bc06eb5692a73dec2be2cd7e5a *tests/fanny-ex.R 290bc5b0aa385784ecd22974f9781ff3 *tests/mona.R de3bfe9b4a3e222eba5c9c9d8ed8c891 *tests/mona.Rout.save -0ee9c09116ed658c860c0c869fb22f77 *tests/pam.R -ec46d40c043dd4c393ed24d8bfb3a286 *tests/pam.Rout.save +1602f86b7b3b703a2c20ae545df1bb85 *tests/pam.R +2de74c28817658f7e2eba1f72939dc57 *tests/pam.Rout.save 477cd7fd12117a6cbcdfc9d5944fbd39 *tests/silhouette-default.R 11875bfedd807686d13d469c123770e1 *tests/silhouette-default.Rout.save d9cdce1776e344a6f4f2574cee6ef487 *tests/sweep-ex.R diff -Nru cluster-2.1.0/po/cluster.pot cluster-2.1.2/po/cluster.pot --- cluster-2.1.0/po/cluster.pot 2019-04-02 15:20:49.000000000 +0000 +++ cluster-2.1.2/po/cluster.pot 2021-01-30 21:26:05.000000000 +0000 @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: cluster 2.0.8\n" +"Project-Id-Version: cluster 2.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-02 17:09+0200\n" +"POT-Creation-Date: 2021-01-30 22:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -37,7 +37,7 @@ msgid "Invalid 'medoids'" msgstr "" -#: pam.c:887 +#: pam.c:1011 #, c-format msgid "pam(): Bug in C level cstat(), k=%d: ntt=0" msgstr "" diff -Nru cluster-2.1.0/po/de.po cluster-2.1.2/po/de.po --- cluster-2.1.0/po/de.po 2019-04-02 15:20:49.000000000 +0000 +++ cluster-2.1.2/po/de.po 2021-01-30 21:26:05.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: cluster 2.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-02 17:09+0200\n" +"POT-Creation-Date: 2021-01-30 22:00+0100\n" "PO-Revision-Date: 2015-02-02 12:30+0100\n" "Last-Translator: Detlef Steuer \n" "Language-Team: R Core \n" @@ -37,7 +37,7 @@ msgid "Invalid 'medoids'" msgstr "unzulässige 'medoids'" -#: pam.c:887 +#: pam.c:1011 #, c-format msgid "pam(): Bug in C level cstat(), k=%d: ntt=0" msgstr "pam(): Bug in C Level cstat(), k=%d: ntt=0" diff -Nru cluster-2.1.0/po/fr.po cluster-2.1.2/po/fr.po --- cluster-2.1.0/po/fr.po 1970-01-01 00:00:00.000000000 +0000 +++ cluster-2.1.2/po/fr.po 2021-04-16 13:57:13.000000000 +0000 @@ -0,0 +1,52 @@ +# Translation of src/library/Recommended/cluster/po/cluster.pot to French +# Copyright (C) 2013 The R Foundation +# This file is distributed under the same license as the R package. +# Philippe.Grosjean@umons.ac.be, 2014-2021 +msgid "" +msgstr "" +"Project-Id-Version: cluster 2.0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-30 22:00+0100\n" +"PO-Revision-Date: 2021-02-11 10:56+0100\n" +"Last-Translator: Philippe Grosjean \n" +"Language-Team: R Core \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: clara.c:101 +#, c-format +msgid "C level clara(): random k=%d > n **\n" +msgstr "Code C de clara(): random k=%d > n **\n" + +#: clara.c:312 +#, c-format +msgid "clara()'s C level dysta2(nsam=%d, p=%d, nbest=%d, n=%d) gave 'toomany_NA'" +msgstr "code C de clara(), dysta2(nsam=%d, p=%d, nbest=%d, n=%d) a donné 'toomany_NA'" + +#: clara.c:348 clara.c:353 +#, c-format +msgid "C level dysta2(): nsel[%s= %d] = %d is outside 0..n, n=%d" +msgstr "Code C de dysta2(): nsel[%s= %d] = %d est en dehors de la plage 0..n, n=%d" + +#: pam.c:161 +msgid "Invalid 'medoids'" +msgstr "Les 'medoids' sont incorrects" + +#: pam.c:1011 +#, c-format +msgid "pam(): Bug in C level cstat(), k=%d: ntt=0" +msgstr "pam() : Bogue dans le code C de cstat(), k=%d: ntt=0" + +#: twins.c:153 +#, c-format +msgid "agnes(method=%d, par.method=*) lead to invalid merge; step %d, D(.,.)=%g" +msgstr "agnes(method=%d, par.method=*) conduit à une fusion incorrecte ; étape %d, D(.,.)=%g" + +#: twins.c:260 +#, c-format +msgid "invalid method (code %d)" +msgstr "méthode incorrecte (code %d)" diff -Nru cluster-2.1.0/po/it.po cluster-2.1.2/po/it.po --- cluster-2.1.0/po/it.po 1970-01-01 00:00:00.000000000 +0000 +++ cluster-2.1.2/po/it.po 2021-01-30 21:26:05.000000000 +0000 @@ -0,0 +1,59 @@ +# R Italian translation +# Copyright (C) The R Foundation +# This file is distributed under the same license as the R package. +# Daniele Medri , 2005-2020. +# +msgid "" +msgstr "" +"Project-Id-Version: cluster 2.0.8\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-30 22:00+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Daniele Medri \n" +"Language-Team: Italian https://github.com/dmedri/R-italian-lang\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.2.1\n" + +#: clara.c:101 +#, c-format +msgid "C level clara(): random k=%d > n **\n" +msgstr "Funzione clara() a livello C: random k=%d > n **\n" + +#: clara.c:312 +#, c-format +msgid "" +"clara()'s C level dysta2(nsam=%d, p=%d, nbest=%d, n=%d) gave 'toomany_NA'" +msgstr "" +"clara() a livello C: dysta2(nsam=%d, p=%d, nbest=%d, n=%d) ha riportato " +"'toomany_NA'" + +#: clara.c:348 clara.c:353 +#, c-format +msgid "C level dysta2(): nsel[%s= %d] = %d is outside 0..n, n=%d" +msgstr "" +"Funzione dysta2() a livello C: nsel[%s= %d] = %d è al di fuori di 0..n, n=%d" + +#: pam.c:161 +msgid "Invalid 'medoids'" +msgstr "'medoids' non valido" + +#: pam.c:1011 +#, c-format +msgid "pam(): Bug in C level cstat(), k=%d: ntt=0" +msgstr "pam(): Bug a livello C di cstat(), k=%d: ntt=0" + +#: twins.c:153 +#, c-format +msgid "" +"agnes(method=%d, par.method=*) lead to invalid merge; step %d, D(.,.)=%g" +msgstr "" +"agnes(method=%d, par.method=*) porta ad una unione non valida %d, D(.,.)=%g" + +#: twins.c:260 +#, c-format +msgid "invalid method (code %d)" +msgstr "metodo non valido (codice %d)" diff -Nru cluster-2.1.0/po/ko.po cluster-2.1.2/po/ko.po --- cluster-2.1.0/po/ko.po 2019-04-02 15:20:49.000000000 +0000 +++ cluster-2.1.2/po/ko.po 2021-01-30 21:26:05.000000000 +0000 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: cluster 1.15.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-02 17:09+0200\n" +"POT-Creation-Date: 2021-01-30 22:00+0100\n" "PO-Revision-Date: 2015-02-06 21:56-0600\n" "Last-Translator:Chel Hee Lee \n" "Language-Team: Chel Hee Lee \n" @@ -43,7 +43,7 @@ msgid "Invalid 'medoids'" msgstr "" -#: pam.c:887 +#: pam.c:1011 #, c-format msgid "pam(): Bug in C level cstat(), k=%d: ntt=0" msgstr "pam(): Bug in C level cstat(), k=%d: ntt=0" diff -Nru cluster-2.1.0/po/lt.po cluster-2.1.2/po/lt.po --- cluster-2.1.0/po/lt.po 1970-01-01 00:00:00.000000000 +0000 +++ cluster-2.1.2/po/lt.po 2021-04-15 07:23:31.000000000 +0000 @@ -0,0 +1,59 @@ +# Lithuanian translations for cluster package. +# Copyright (C) 2020 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the cluster package. +# Gabrielė Stupurienė , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: cluster 2.1.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-30 22:00+0100\n" +"PO-Revision-Date: 2021-02-12 11:04+0200\n" +"Last-Translator: Gabrielė Stupurienė \n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && (n%100<11 || n%100>19) ? 0 : n" +"%10>=2 && n%10<=9 && (n%100<11 || n%100>19) ? 1 : 2);\n" + +#: clara.c:101 +#, c-format +msgid "C level clara(): random k=%d > n **\n" +msgstr "C lygio clara(): atsitiktinis k=%d > n **\n" + +#: clara.c:312 +#, c-format +msgid "" +"clara()'s C level dysta2(nsam=%d, p=%d, nbest=%d, n=%d) gave 'toomany_NA'" +msgstr "" +"clara() C lygio dysta2(nsam=%d, p=%d, nbest=%d, n=%d) davė 'toomany_NA'" + +#: clara.c:348 clara.c:353 +#, c-format +msgid "C level dysta2(): nsel[%s= %d] = %d is outside 0..n, n=%d" +msgstr "C lygio dysta2(): nsel[%s= %d] = %d yra už 0..n, n=%d" + +#: pam.c:161 +msgid "Invalid 'medoids'" +msgstr "Neleistinas 'medoids'" + +#: pam.c:1011 +#, c-format +msgid "pam(): Bug in C level cstat(), k=%d: ntt=0" +msgstr "pam(): Klaida C lygio cstat(), k = %d: ntt = 0" + +#: twins.c:153 +#, c-format +msgid "" +"agnes(method=%d, par.method=*) lead to invalid merge; step %d, D(.,.)=%g" +msgstr "" +"agnes(method=%d, par.method=*) sukelia neleistiną suliejimą; žingsnis %d, " +"D(.,.) =%g" + +#: twins.c:260 +#, c-format +msgid "invalid method (code %d)" +msgstr "neleistinas metodas (kodas %d)" diff -Nru cluster-2.1.0/po/R-cluster.pot cluster-2.1.2/po/R-cluster.pot --- cluster-2.1.0/po/R-cluster.pot 2019-04-02 15:20:49.000000000 +0000 +++ cluster-2.1.2/po/R-cluster.pot 2021-01-30 21:26:05.000000000 +0000 @@ -1,7 +1,7 @@ msgid "" msgstr "" -"Project-Id-Version: cluster 2.0.8\n" -"POT-Creation-Date: 2019-04-02 17:09\n" +"Project-Id-Version: cluster 2.1.1\n" +"POT-Creation-Date: 2021-01-30 22:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -199,6 +199,9 @@ msgid "Number of clusters 'k' must be in {1,2, .., n-1}; hence n >= 2" msgstr "" +msgid "Set either 'variant' or 'pamonce', but not both" +msgstr "" + msgid "'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d" msgstr "" @@ -241,7 +244,7 @@ msgid "NA-values are not allowed in clustering vector" msgstr "" -msgid "Error in Fortran routine for the spanning ellipsoid,\n rank problem??" +msgid "Error in C routine for the spanning ellipsoid,\n rank problem??" msgstr "" msgid "'col.clus' should have length 4 when color is TRUE" @@ -259,6 +262,12 @@ msgid "full silhouette is only available for results of 'clara(*, keep.data = TRUE)'" msgstr "" +msgid "specified both 'full' and 'subset'; will use 'subset'" +msgstr "" + +msgid "'full' must be FALSE, TRUE, or a number in [0, 1]" +msgstr "" + msgid "'x' must only have integer codes" msgstr "" diff -Nru cluster-2.1.0/po/R-de.po cluster-2.1.2/po/R-de.po --- cluster-2.1.0/po/R-de.po 2019-04-02 15:20:49.000000000 +0000 +++ cluster-2.1.2/po/R-de.po 2021-04-15 07:23:31.000000000 +0000 @@ -3,9 +3,9 @@ # This file is distributed under the same license as the R package. msgid "" msgstr "" -"Project-Id-Version: R 3.6.0 cluster 2.0.8\n" +"Project-Id-Version: R 3.6.0 cluster 2.0.7\n" "Report-Msgid-Bugs-To: bugs.r-project.org\n" -"POT-Creation-Date: 2018-04-06 23:26\n" +"POT-Creation-Date: 2021-01-30 22:00\n" "PO-Revision-Date: 2019-04-02 13:23+0200\n" "Last-Translator: Detlef Steuer \n" "Language-Team: R Core Team = 2 variables (in current implementation)" -msgstr "mona() (in der aktuellen Implementierung) benötigt mindestens p >= 2 Variablen" +msgstr "" +"mona() (in der aktuellen Implementierung) benötigt mindestens p >= 2 " +"Variablen" msgid "No clustering performed, an object was found with all values missing." msgstr "" @@ -241,6 +244,9 @@ msgid "Number of clusters 'k' must be in {1,2, .., n-1}; hence n >= 2" msgstr "Anzahl der Cluster 'k' muss auch {1, 2, ..., n-1} sein; deshalb n >= 2" +msgid "Set either 'variant' or 'pamonce', but not both" +msgstr "" + msgid "" "'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d" msgstr "" @@ -292,8 +298,9 @@ msgid "NA-values are not allowed in clustering vector" msgstr "NAs im Clustervektor nicht erlaubt" +#, fuzzy msgid "" -"Error in Fortran routine for the spanning ellipsoid,\n" +"Error in C routine for the spanning ellipsoid,\n" " rank problem??" msgstr "Fehler im Fortran-Kode für den aufspannenden Ellipsoiden, Rangproblem?" @@ -316,6 +323,12 @@ "die volle Silhoutte ist nur verfügbar für Resultate von 'clara(*, keep." "data=TRUE)'" +msgid "specified both 'full' and 'subset'; will use 'subset'" +msgstr "" + +msgid "'full' must be FALSE, TRUE, or a number in [0, 1]" +msgstr "" + msgid "'x' must only have integer codes" msgstr "'x' darf nur ganzzahlige Kodes enthalten" diff -Nru cluster-2.1.0/po/R-fr.po cluster-2.1.2/po/R-fr.po --- cluster-2.1.0/po/R-fr.po 2018-04-06 21:29:03.000000000 +0000 +++ cluster-2.1.2/po/R-fr.po 2021-04-16 13:57:13.000000000 +0000 @@ -1,19 +1,19 @@ # Translation of src/library/Recommended/cluster/po/R-cluster.pot to German # Copyright (C) 2013 The R Foundation # This file is distributed under the same license as the R package. -# Philippe.Grosjean@umons.ac.be, 2014-- +# Philippe.Grosjean@umons.ac.be, 2014-2021 msgid "" msgstr "" "Project-Id-Version: cluster 1.14.5\n" -"POT-Creation-Date: 2018-04-06 23:26\n" -"PO-Revision-Date: 2014-03-30 09:03+0100\n" +"POT-Creation-Date: 2021-01-30 22:00\n" +"PO-Revision-Date: 2021-04-12 18:49+0200\n" "Last-Translator: Philippe Grosjean \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.6.4\n" +"X-Generator: Poedit 2.4.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgid "invalid clustering method" @@ -26,33 +26,25 @@ msgstr "'par.method' doit être de longueur 1, 3 ou 4" msgid "NA-values in the dissimilarity matrix not allowed." -msgstr "" -"les valeurs manquantes (NA) ne sont pas autorisées dans la matrice de " -"dissimilarité." +msgstr "Les valeurs manquantes (NA) ne sont pas autorisées dans la matrice de dissimilarité." msgid "'x' is not and cannot be converted to class \"dissimilarity\"" -msgstr "" -"'x' n'est pas et ne peux pas être converti en un objet de classe " -"\"dissimilarity\"" +msgstr "'x' n'est pas et ne peux pas être converti en un objet de classe \"dissimilarity\"" msgid "x is not a numeric dataframe or matrix." -msgstr "" -"x n'est pas un tableau de données (data frame) ou une matrice numérique." +msgstr "x n'est pas un tableau de données (data frame) ou une matrice numérique." msgid "need at least 2 objects to cluster" msgstr "au moins deux objets sont nécessaires pour effectuer une agrégation" msgid "No clustering performed, NA-values in the dissimilarity matrix." -msgstr "" -"Aucune agrégation n'est réalisée, présence de NAs dans la matrice de " -"dissimilarité." +msgstr "Aucune agrégation n'est réalisée, présence de NAs dans la matrice de dissimilarité." msgid "'x' is a \"dist\" object, but should be a data matrix or frame" -msgstr "" -"'x' est un objet \"dist\", mais il faut une matrice ou un tableau de données" +msgstr "'x' est un objet \"dist\", mais il faut une matrice ou un tableau de données" msgid "The number of cluster should be at least 1 and at most n-1." -msgstr "Le nombre de groupes doit être compris entre 1 et n-1." +msgstr "Le nombre de groupes doit être entre 1 et n-1 compris." msgid "'sampsize' should be at least %d = max(2, 1+ number of clusters)" msgstr "'sampsize' doit être au minimum %d = max(2, 1+ nombre de groupes)" @@ -67,30 +59,22 @@ msgstr "lorsque 'medoids.x' est FALSE, 'keep.data' doit l'être aussi" msgid "" -"Distance computations with NAs: using correct instead of pre-2016 wrong " -"formula.\n" -"Use 'correct.d=FALSE' to get previous results or set 'correct.d=TRUE' " -"explicitly\n" +"Distance computations with NAs: using correct instead of pre-2016 wrong formula.\n" +"Use 'correct.d=FALSE' to get previous results or set 'correct.d=TRUE' explicitly\n" "to suppress this warning." msgstr "" +"Calcul de distances avec NAs : utilisation de la formule corrigée à la place de celle d’avant 2016 qui était erronnée.\n" +"Utilisez 'correct.d=FALSE' pour obtenir les résultats d'avant, ou indiquez 'correct.d=TRUE' de manière explicite\n" +"pour éliminer cet avis." -#, fuzzy msgid "invalid 'correct.d'" -msgstr "objet 'twins' incorrect" +msgstr "'correct.d' incorrect" -msgid "" -"Each of the random samples contains objects between which no distance can be " -"computed." -msgstr "" -"Chacun des échantillons aléatoires contient des objets entre lesquels la " -"distance ne peut être calculée." +msgid "Each of the random samples contains objects between which no distance can be computed." +msgstr "Chacun des échantillons aléatoires contient des objets entre lesquels aucune distance ne peut être calculée." -msgid "" -"For each of the %d samples, at least one object was found which could not be " -"assigned to a cluster (because of missing values)." -msgstr "" -"Dans chacun des %d échantillons, au moins un objet ne peut être assigné à un " -"groupe (parce qu'il contient des valeurs manquantes)" +msgid "For each of the %d samples, at least one object was found which could not be assigned to a cluster (because of missing values)." +msgstr "Dans chacun des %d échantillons, au moins un objet ne peut être assigné à un groupe (parce qu'il contient des valeurs manquantes)" msgid "invalid 'jstop' from .C(cl_clara,.):" msgstr "'jstop' incorrect obtenu de .C(cl_clara,.) :" @@ -98,19 +82,17 @@ msgid "'B' has to be a positive integer" msgstr "'B' doit être un entier positif" -#, fuzzy msgid "invalid 'spaceH0':" -msgstr "type incorrect" +msgstr "'spaceH0' incorrect :" msgid "index has to be a function or a list of function" -msgstr "" +msgstr "index doit être une fonction ou une liste de fonctions" msgid "invalid 'twins' object" msgstr "objet 'twins' incorrect" msgid "x is not a dataframe or a numeric matrix." -msgstr "" -"x n'est pas un tableau de données (data frame) ou une matrice numérique." +msgstr "x n'est pas un tableau de données (data frame) ni une matrice numérique." msgid "invalid %s; must be named list" msgstr "%s incorrect ; doit être une liste nommée" @@ -125,40 +107,34 @@ msgstr "%s doit contenir des noms de colonnes ou des nombres" msgid "at least one binary variable has more than 2 levels." -msgstr "au moins une des variables binaires a plus de deux niveaux." +msgstr "une des variables binaires au moins a plus de deux niveaux." msgid "at least one binary variable has not 2 different levels." -msgstr "au moins une variable binaire n'a pas deux nivea\tux." +msgstr "une des variables binaires au moins n'a pas deux niveaux." msgid "at least one binary variable has values not in {0,1,NA}" -msgstr "au moins une variable binaire a des valeurs autres que {0,1,NA}" +msgstr "une des variables binaires au moins a des valeurs autres que {0,1,NA}" msgid "binary variable(s) %s treated as interval scaled" -msgstr "" -"la ou les variables binaires %s sont traitées comme intervalles standardisés" +msgstr "la ou les variables binaires %s sont traitées comme des intervalles standardisés" msgid "%s has constant columns %s; these are standardized to 0" -msgstr "%s à des colonnes constantes %s ; elles sont standardisées à 0" +msgstr "%s a des colonnes constantes %s ; elles sont standardisées à 0" msgid "with mixed variables, metric \"gower\" is used automatically" -msgstr "" -"avec des variables mélangées, la métrique \"gower\" est utilisée " -"automatiquement" +msgstr "avec des variables mélangées, la métrique \"gower\" est utilisée automatiquement" msgid "'weights' must be of length p (or 1)" msgstr "'weights' doit être de longueur p (ou 1)" msgid "invalid type %s for column numbers %s" -msgstr "type inadéquat %s pour les numéros de colonnes %s" +msgstr "type invalide %s pour les numéros de colonnes %s" msgid "NA values in the dissimilarity matrix not allowed." -msgstr "" -"les valeurs manquantes (NA) ne sont pas admises dans la matrice de " -"dissimilarité." +msgstr "Les valeurs manquantes (NA) ne sont pas admises dans la matrice de dissimilarité." msgid "No clustering performed, NA's in dissimilarity matrix." -msgstr "" -"Aucune agrégation n'est réalisée, NAs dans la matrice de dissimilarité." +msgstr "Aucune agrégation n'est réalisée, NAs dans la matrice de dissimilarité." msgid "'x' must be numeric n x p matrix" msgstr "'x' doit être une matrice numérique n x p" @@ -170,7 +146,7 @@ msgstr "aucun point sans valeurs manquantes" msgid "computed some negative or all 0 probabilities" -msgstr "des probabilités négatives ou égales à zéro ont été calculées" +msgstr "des probabilités négatives ou toutes égales à zéro ont été calculées" msgid "algorithm possibly not converged in %d iterations" msgstr "l'algorithme n'a vraisemblablement pas convergé en %d itérations" @@ -179,7 +155,7 @@ msgstr "'A doit être une matrice de covariance p x p définissant un ellipsoïde" msgid "ellipsoidPoints() not yet implemented for p >= 3 dim." -msgstr "ellipsoidPoints() non implémenté pour p >= 3 dim." +msgstr "ellipsoidPoints() pas encore implémenté pour p >= 3 dim." msgid "'k' (number of clusters) must be in {1,2, .., n/2 -1}" msgstr "'k' (nombre de groupes) doit être {1,2,…, n/2 -1}" @@ -194,94 +170,70 @@ msgstr "'iniMem.p' doit être une matrice n * k non négative avec rowSums == 1" msgid "FANNY algorithm has not converged in 'maxit' = %d iterations" -msgstr "l'algorithme FANNY n'a pas convergé en 'maxit' = %d itérations" +msgstr "L’algorithme FANNY n'a pas convergé en 'maxit' = %d itérations" msgid "the memberships are all very close to 1/k. Maybe decrease 'memb.exp' ?" -msgstr "" -"les appartenances sont toutes très proches de 1/k. Essayez en diminuant " -"'memb.exp' ?" +msgstr "les appartenances sont toutes très proches de 1/k. Essayez en diminuant 'memb.exp' ?" msgid "'m', a membership matrix, must be nonnegative with rowSums == 1" -msgstr "" -"'m', une matrice d'appartenance, doit être non négative avec rowSums == 1" +msgstr "'m', une matrice d'appartenance, doit être non négative avec rowSums == 1" msgid "'n' must be >= 2" -msgstr "'n\" doit être >= 2" +msgstr "'n' doit être >= 2" msgid "x must be a matrix or data frame." msgstr "x doit être une matrice ou un tableau de données (data frame)." -#, fuzzy -msgid "" -"All variables must be binary (e.g., a factor with 2 levels, both present)." -msgstr "" -"Toutes les variables doivent être binaires (c'est-à-dire, des variables " -"facteur à 2 niveaux)." +msgid "All variables must be binary (e.g., a factor with 2 levels, both present)." +msgstr "Toutes les variables doivent être booléennes (c'est-à-dire, des variables facteur à 2 niveaux présents)." msgid "mona() needs at least p >= 2 variables (in current implementation)" -msgstr "" +msgstr "mona() a besoin d'au moins p >= 2 variables (dans l'implémentation actuelle)" msgid "No clustering performed, an object was found with all values missing." -msgstr "" -"Aucune agrégation n'a été effectuée, un objet a toutes ses valeurs " -"manquantes." +msgstr "Aucune agrégation n'a été effectuée, un objet a toutes ses valeurs manquantes." -msgid "" -"No clustering performed, found variable with more than half values missing." -msgstr "" -"Aucune agrégation n'a été effectuée, une variable a plus de la moitié de ses " -"valeurs manquantes." +msgid "No clustering performed, found variable with more than half values missing." +msgstr "Aucune agrégation n'a été effectuée, une variable a plus de la moitié de ses valeurs manquantes." -msgid "" -"No clustering performed, a variable was found with all non missing values " -"identical." -msgstr "" -"Aucune agrégation n'a été effectuée, une variable a toutes ses valeurs non " -"manquantes." +msgid "No clustering performed, a variable was found with all non missing values identical." +msgstr "Aucune agrégation n'a été effectuée, une variable a toutes ses valeurs non manquantes identiques." msgid "No clustering performed, all variables have at least one missing value." -msgstr "" -"Aucune agrégation n'a été effectuée, toutes les variables ont au moins une " -"valeur manquante." +msgstr "Aucune agrégation n'a été effectuée, toutes les variables ont au moins une valeur manquante." msgid "Cannot keep data when 'x' is a dissimilarity!" -msgstr "" +msgstr "Impossible de conserver les données lorsque 'x' est un objet dissimilarity !" msgid "have %d observations, but not more than %d are allowed" -msgstr "" +msgstr "il y a %d observations, mais pas plus de %d sont acceptées" msgid "Number of clusters 'k' must be in {1,2, .., n-1}; hence n >= 2" msgstr "Le nombre de groupes 'k' doit être dans {1,2, …, n-1} ; où n >= 2" -msgid "" -"'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d" -msgstr "" -"'medoids' doit être NULL ou un vecteur de %d valeurs d'indice distinctes " -"dans {1, 2, …, n}, n=%d" +msgid "Set either 'variant' or 'pamonce', but not both" +msgstr "Spécifiez soit 'variant’, soit 'pamonce’, mais pas les deux en même temps" + +msgid "'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d" +msgstr "'medoids' doit être NULL ou un vecteur de %d valeurs d'indices distincts dans {1, 2, …, n}, n=%d" msgid "No clustering performed, NAs in the computed dissimilarity matrix." -msgstr "" -"Aucune agrégation n'a été effectuée, NAs dans la matrice de dissimilarité " -"calculée." +msgstr "Aucune agrégation n'a été effectuée, NAs dans la matrice de dissimilarité calculée." msgid "error from .C(cl_pam, *): invalid medID's" msgstr "erreur depuis .C(cl_pam, *) : medIDs incorrects" msgid "NA-values are not allowed in dist-like 'x'." -msgstr "" -"des valeurs manquantes NA ne sont pas autorisées dans 'x' de type dist." +msgstr "Les valeurs manquantes NA ne sont pas autorisées dans 'x' de type dist." msgid "Distances must be result of dist or a square matrix." -msgstr "" -"Les distances doivent résulter d'un objet dist ou d'une matrice carrée." +msgstr "Les distances doivent résulter d'un objet dist ou d'une matrice carrée." msgid "the square matrix is not symmetric." msgstr "la matrice carrée n'est pas symétrique." msgid ">>>>> funny case in clusplot.default() -- please report!" -msgstr "" -">>>>> cas pathologique dans clusplot.default() -- veuillez envoyer un " -"rapport de bug !" +msgstr ">>>>> cas pathologique dans clusplot.default() -- veuillez envoyer un rapport de bogue !" msgid "x is not a data matrix" msgstr "x n'est pas une matrice de données" @@ -292,11 +244,8 @@ msgid "one or more variables contain only missing values" msgstr "une ou plusieurs variables ne contiennent que des valeurs manquantes" -msgid "" -"Missing values were displaced by the median of the corresponding variable(s)" -msgstr "" -"Les valeurs manquantes ont été remplacées par la médiane de la ou des " -"variables correspondantes" +msgid "Missing values were displaced by the median of the corresponding variable(s)" +msgstr "Les valeurs manquantes ont été remplacées par la médiane de la ou des variables correspondantes" msgid "x is not numeric" msgstr "x n'est pas numérique" @@ -305,48 +254,47 @@ msgstr "Le vecteur d'agrégation est de longueur incorrecte" msgid "NA-values are not allowed in clustering vector" -msgstr "" -"Les valeurs manquantes NA ne sont pas autorisées dans le vecteur d'agrégation" +msgstr "Les valeurs manquantes NA ne sont pas autorisées dans le vecteur d'agrégation" msgid "" -"Error in Fortran routine for the spanning ellipsoid,\n" +"Error in C routine for the spanning ellipsoid,\n" " rank problem??" msgstr "" -"Erreur dans la routine Fortran pour obtenir l'ellipsoïde de dispersion,\n" -" problème de rang??" +"Erreur dans la routine C pour obtenir l'ellipsoïde de dispersion,\n" +" problème de rang ??" msgid "'col.clus' should have length 4 when color is TRUE" msgstr "'col.clus' doit avoir une longueur de 4 lorsque color est TRUE" msgid "no diss nor data found, nor the original argument of %s" -msgstr "pas de diss ou de données trouvées, même pas l'argument original de %s" +msgstr "pas de diss ni de données trouvées, ni même l'argument original de %s" msgid "no diss nor data found for clusplot()'" -msgstr "pas de diss ou de données trouvées pour clusplot()'" +msgstr "pas de diss ni de données trouvées pour clusplot()'" msgid "invalid partition object" msgstr "objet de partitionnement incorrect" -msgid "" -"full silhouette is only available for results of 'clara(*, keep.data = TRUE)'" -msgstr "" -"la silhouette complète n'est disponible que pour les résultats de 'clara(*, " -"keep.data = TRUE)'" +msgid "full silhouette is only available for results of 'clara(*, keep.data = TRUE)'" +msgstr "la silhouette complète n'est disponible que pour les résultats de 'clara(*, keep.data = TRUE)'" + +msgid "specified both 'full' and 'subset'; will use 'subset'" +msgstr "'full' et 'subset' tous deux spécifiés ; utilisation de 'subset’" + +msgid "'full' must be FALSE, TRUE, or a number in [0, 1]" +msgstr "'full' doit être parmi FALSE, TRUE, ou un nombre de l’intervalle [0, 1]" msgid "'x' must only have integer codes" -msgstr "'x' doit n'avoir que des codes entiers" +msgstr "'x' ne doit avoir que des codes entiers" msgid "Need either a dissimilarity 'dist' or diss.matrix 'dmatrix'" -msgstr "" -"Il faut soit un objet 'dist' de dissimilarité ou une matrice de " -"dissimilarité 'dmatrix'" +msgstr "Il faut soit un objet 'dist' de dissimilarité ou une matrice de dissimilarité 'dmatrix'" msgid "'dmatrix' is not a dissimilarity matrix compatible to 'x'" msgstr "'dmatrix' n'est pas une matrice de dissimilarité compatible avec 'x'" msgid "clustering 'x' and dissimilarity 'dist' are incompatible" -msgstr "" -"l'agrégation 'x' et la matrice de dissimilarité 'dist' sont incompatibles" +msgstr "l'agrégation 'x' et la matrice de dissimilarité 'dist' sont incompatibles" msgid "invalid silhouette structure" msgstr "structure de silhouette incorrecte" @@ -360,21 +308,17 @@ msgid "Observation %s has *only* NAs --> omit it for clustering" msgid_plural "Observations %s have *only* NAs --> omit them for clustering!" msgstr[0] "L'observation %s n'a *que* des NAs --> ignorée pour le regroupement" -msgstr[1] "" -"Les observations %s n'ont *que* des NAs --> ignorées pour le regroupement!" +msgstr[1] "Les observations %s n'ont *que* des NAs --> ignorées pour le regroupement!" msgid "%d observation (%s) has *only* NAs --> omit them for clustering!" -msgid_plural "" -"%d observations (%s ...) have *only* NAs --> omit them for clustering!" -msgstr[0] "" -"%d observation (%s) n'a *que* des NAs --> ignorée pour le regroupement!" -msgstr[1] "" -"%d observations (%s) n'ont *que* des NAs --> ignorées pour le regroupement!" +msgid_plural "%d observations (%s ...) have *only* NAs --> omit them for clustering!" +msgstr[0] "%d observation (%s) n'a *que* des NAs --> ignorée pour le regroupement!" +msgstr[1] "%d observations (%s) n'ont *que* des NAs --> ignorées pour le regroupement!" msgid "setting 'logical' variable %s to type 'asymm'" msgid_plural "setting 'logical' variables %s to type 'asymm'" msgstr[0] "la variable 'logical' %s est transformée en type 'asymm'" -msgstr[1] "les variable 'logical' %s sont transformées en type 'asymm'" +msgstr[1] "les variables 'logical' %s sont transformées en type 'asymm'" #~ msgid "NAdiss" #~ msgstr "NAdiss" diff -Nru cluster-2.1.0/po/R-it.po cluster-2.1.2/po/R-it.po --- cluster-2.1.0/po/R-it.po 1970-01-01 00:00:00.000000000 +0000 +++ cluster-2.1.2/po/R-it.po 2021-04-14 10:42:35.000000000 +0000 @@ -0,0 +1,362 @@ +# R Italian translation +# Copyright (C) The R Foundation +# This file is distributed under the same license as the R package. +# Daniele Medri , 2005-2021. +# +msgid "" +msgstr "" +"Project-Id-Version: R-cluster 2.0.8\n" +"Report-Msgid-Bugs-To: bugs.r-project.org\n" +"POT-Creation-Date: 2021-01-30 22:00\n" +"PO-Revision-Date: \n" +"Last-Translator: Daniele Medri \n" +"Language-Team: Italian https://github.com/dmedri/R-italian-lang\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.2.1\n" + +msgid "invalid clustering method" +msgstr "metodo di clustering non valido" + +msgid "ambiguous clustering method" +msgstr "metodo di clustering ambiguo" + +msgid "'par.method' must be of length 1, 3, or 4" +msgstr "'par.method' dev'essere di lunghezza 1, 3 o 4" + +msgid "NA-values in the dissimilarity matrix not allowed." +msgstr "I valori NA non sono ammessi in una matrice di dissimilarità." + +msgid "'x' is not and cannot be converted to class \"dissimilarity\"" +msgstr "'x' non è e non può essere convertito alla classe \"dissimilarity\"" + +msgid "x is not a numeric dataframe or matrix." +msgstr "x non è un data frame o una matrice numerica." + +msgid "need at least 2 objects to cluster" +msgstr "richiede almeno 2 oggetti per l'analisi cluster" + +msgid "No clustering performed, NA-values in the dissimilarity matrix." +msgstr "Nessun cluster generato, valori NA nella matrice di dissomiglianza." + +msgid "'x' is a \"dist\" object, but should be a data matrix or frame" +msgstr "" +"'x' è un oggetto \"dist\", ma dovrebbe essere un data frame o una matrice" + +msgid "The number of cluster should be at least 1 and at most n-1." +msgstr "Il numerod i cluster dovrebbe essere almeno 1 e al massimo n-1." + +msgid "'sampsize' should be at least %d = max(2, 1+ number of clusters)" +msgstr "'sampsize' dovrebbe essere almeno %d = max(2, 1+ numero di cluster)" + +msgid "'sampsize' = %d should not be larger than the number of objects, %d" +msgstr "" +"'sampsize' = %d non dovrebbe essere più grande del numero di oggetti, %d" + +msgid "'samples' should be at least 1" +msgstr "'samples' dovrebbe essere almeno 1" + +msgid "when 'medoids.x' is FALSE, 'keep.data' must be too" +msgstr "quando 'medoids.x' è FALSE, lo dev'essere anche 'keep.data'" + +msgid "" +"Distance computations with NAs: using correct instead of pre-2016 wrong " +"formula.\n" +"Use 'correct.d=FALSE' to get previous results or set 'correct.d=TRUE' " +"explicitly\n" +"to suppress this warning." +msgstr "" +"Calcoli della distanza con NA: si utilizza la formula corretta anziché " +"quella errata pre-2016.\n" +"Si utilizzi 'correct.d = FALSE' per ottenere i risultati precedenti o si " +"imposti 'correct.d = TRUE'\n" +"per sopprimere questo avviso." + +msgid "invalid 'correct.d'" +msgstr "'correct.d' non valido" + +msgid "" +"Each of the random samples contains objects between which no distance can be " +"computed." +msgstr "" +"Ognuno dei campioni casuali contiene oggetti tra i quali non si possono " +"calcolare distanze." + +msgid "" +"For each of the %d samples, at least one object was found which could not be " +"assigned to a cluster (because of missing values)." +msgstr "" +"Per ognuno dei %d campioni, è stato trovato almeno un oggetto che non può " +"essere assegnato ad un cluster (a causa di valori mancanti)." + +msgid "invalid 'jstop' from .C(cl_clara,.):" +msgstr "'jstop' non valido da .C(cl_clara,.):" + +msgid "'B' has to be a positive integer" +msgstr "'B' dev'essere un intero positivo" + +msgid "invalid 'spaceH0':" +msgstr "'spaceH0' non valido:" + +msgid "index has to be a function or a list of function" +msgstr "l'indice dev'essere una funzione o una lista di funzioni" + +msgid "invalid 'twins' object" +msgstr "oggetto 'twins' non valido" + +msgid "x is not a dataframe or a numeric matrix." +msgstr "x non è un data frame o una matrice numerica." + +msgid "invalid %s; must be named list" +msgstr "%s non valido; dev'essere una lista nominata" + +msgid "%s has invalid column names" +msgstr "%s ha nomi colonna non validi" + +msgid "%s must be in 1:ncol(x)" +msgstr "%s dev'essere in 1:ncol(x)" + +msgid "%s must contain column names or numbers" +msgstr "%s deve contenere numeri o nomi di colonna" + +msgid "at least one binary variable has more than 2 levels." +msgstr "almeno una variabile binaria ha più di 2 livelli." + +msgid "at least one binary variable has not 2 different levels." +msgstr "almeno una variabile binaria non ha 2 livelli differenti." + +msgid "at least one binary variable has values not in {0,1,NA}" +msgstr "almeno una variabile binaria ha valori esterni a {0, 1, NA}" + +msgid "binary variable(s) %s treated as interval scaled" +msgstr "variabili binarie %s trattate come intervallo ridimensionato" + +msgid "%s has constant columns %s; these are standardized to 0" +msgstr "%s ha colonne costanti %s; queste sono standardizzate a 0" + +msgid "with mixed variables, metric \"gower\" is used automatically" +msgstr "" +"con variabili miste, la metrica \"gower\" è utilizzata in maniera automatica" + +msgid "'weights' must be of length p (or 1)" +msgstr "'weights' dev'essere di lunghezza p (o 1)" + +msgid "invalid type %s for column numbers %s" +msgstr "tipo %s non valido per i numeri di colonna %s" + +msgid "NA values in the dissimilarity matrix not allowed." +msgstr "I valori NA non sono ammessi in una matrice di dissimilarità." + +msgid "No clustering performed, NA's in dissimilarity matrix." +msgstr "Nessun cluster generato, valori NA nella matrice di dissomiglianza." + +msgid "'x' must be numeric n x p matrix" +msgstr "'x' dev'essere una matrice numerica n x p" + +msgid "omitting NAs" +msgstr "si omettono gli NA" + +msgid "no points without missing values" +msgstr "nessun punto senza valori mancanti" + +msgid "computed some negative or all 0 probabilities" +msgstr "calcolate alcune probabilità negative o tutte 0" + +msgid "algorithm possibly not converged in %d iterations" +msgstr "l'algoritmo potrebbe non convergere in %d iterazioni" + +msgid "'A' must be p x p cov-matrix defining an ellipsoid" +msgstr "" +"'A' dev'essere una matrice di covarianza p x p che definisce un ellissoide" + +msgid "ellipsoidPoints() not yet implemented for p >= 3 dim." +msgstr "ellipsoidPoints() non ancora implementato per p >= 3 dimensioni." + +msgid "'k' (number of clusters) must be in {1,2, .., n/2 -1}" +msgstr "'k' (il numero di cluster) dev'essere in {1,2, .., n/2 -1}" + +msgid "'memb.exp' must be a finite number > 1" +msgstr "'memb.exp' dev'essere un numero finito > 1" + +msgid "'maxit' must be non-negative integer" +msgstr "'maxit' dev'essere un intero non negativo" + +msgid "'iniMem.p' must be a nonnegative n * k matrix with rowSums == 1" +msgstr "'iniMem.p' dev'essere una matrice non-negativa n * k con rowSums == 1" + +msgid "FANNY algorithm has not converged in 'maxit' = %d iterations" +msgstr "L'algoritmo FANNY senza convergenza con 'maxit' = %d iterazioni" + +msgid "the memberships are all very close to 1/k. Maybe decrease 'memb.exp' ?" +msgstr "" +"le appartenenze sono tutte molto vicine a 1/k. Decrementare 'memb.exp'?" + +msgid "'m', a membership matrix, must be nonnegative with rowSums == 1" +msgstr "" +"'m', una matrice di appartenenza, dev'essere non negativa con rowSums == 1" + +msgid "'n' must be >= 2" +msgstr "'n' dev'essere >= 2" + +msgid "x must be a matrix or data frame." +msgstr "x dev'essere una matrice o un data frame." + +msgid "" +"All variables must be binary (e.g., a factor with 2 levels, both present)." +msgstr "" +"Tutte le variabili devono essere binarie (es. un fattore a 2 livelli, " +"entrambi presenti)." + +msgid "mona() needs at least p >= 2 variables (in current implementation)" +msgstr "mona() richiede almeno p >= 2 variabili (nell'attuale implementazione)" + +msgid "No clustering performed, an object was found with all values missing." +msgstr "Nessun cluster generato, un oggetto aveva tutti i valori mancanti." + +msgid "" +"No clustering performed, found variable with more than half values missing." +msgstr "" +"Nessun cluster generato, trovata una variabile con più della metà dei valori " +"mancanti." + +msgid "" +"No clustering performed, a variable was found with all non missing values " +"identical." +msgstr "" +"Nessun cluster generato, una variabile è stata trovata con tutti i valori " +"non-mancanti identici." + +msgid "No clustering performed, all variables have at least one missing value." +msgstr "" +"Clustering interrotto, tutte le variabili hanno almeno un valore mancante." + +msgid "Cannot keep data when 'x' is a dissimilarity!" +msgstr "Non è possibile conservare i dati quando 'x' è una dissomiglianza!" + +msgid "have %d observations, but not more than %d are allowed" +msgstr "hanno %d osservazioni, ma non più di %d sono ammesse" + +msgid "Number of clusters 'k' must be in {1,2, .., n-1}; hence n >= 2" +msgstr "Il numero di cluster 'k' dev'essere in {1,2, .., n-1}; perciò n >= 2" + +msgid "Set either 'variant' or 'pamonce', but not both" +msgstr "Imposta \"variant\" o \"pamonce\", ma non entrambi" + +msgid "" +"'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d" +msgstr "" +"'medoids' dev'essere NULL o un vettore di %d indici distinti in {1,2, .., " +"n}, n=%d" + +msgid "No clustering performed, NAs in the computed dissimilarity matrix." +msgstr "Nessun cluster generato, valori NA nella matrice di dissomiglianza." + +msgid "error from .C(cl_pam, *): invalid medID's" +msgstr "errore in .C(cl_pam, *): medID non valido" + +msgid "NA-values are not allowed in dist-like 'x'." +msgstr "I valori NA non sono ammessi in dist-simile 'x'." + +msgid "Distances must be result of dist or a square matrix." +msgstr "Le distanze devono essere il risultato di una matrice dist o quadrata." + +msgid "the square matrix is not symmetric." +msgstr "la matrice quadrata non è simmetrica." + +msgid ">>>>> funny case in clusplot.default() -- please report!" +msgstr ">>>>> caso insolito in clusplot.default() -- per piacere, riportalo!" + +msgid "x is not a data matrix" +msgstr "x non è una matrice dati" + +msgid "one or more objects contain only missing values" +msgstr "uno o più oggetti contiene solo valori mancanti" + +msgid "one or more variables contain only missing values" +msgstr "una o più variabili contiene solo valori mancanti" + +msgid "" +"Missing values were displaced by the median of the corresponding variable(s)" +msgstr "" +"I valori mancanti sono stati sostituiti con la mediana delle variabili " +"corrispondenti" + +msgid "x is not numeric" +msgstr "x non è numerico" + +msgid "The clustering vector is of incorrect length" +msgstr "Il vettore di clustering è di lunghezza incorretta" + +msgid "NA-values are not allowed in clustering vector" +msgstr "I valori NA non sono ammessi in un vettore di clustering" + +msgid "" +"Error in C routine for the spanning ellipsoid,\n" +" rank problem??" +msgstr "" +"Errore nella routine C per l'ellissoide di spanning,\n" +" problema di rango?" + +msgid "'col.clus' should have length 4 when color is TRUE" +msgstr "'col.clus' dev'essere di lunghezza 4 quando color è TRUE" + +msgid "no diss nor data found, nor the original argument of %s" +msgstr "nessun diss o dato trovato, neppure l'argomento originale di %s" + +msgid "no diss nor data found for clusplot()'" +msgstr "nessun diss o dato trovato per clusplot()'" + +msgid "invalid partition object" +msgstr "oggetto partizione non valido" + +msgid "" +"full silhouette is only available for results of 'clara(*, keep.data = TRUE)'" +msgstr "" +"la silhouette piena è disponibile solo per risultati di 'clara(*, keep.data " +"= TRUE)'" + +msgid "specified both 'full' and 'subset'; will use 'subset'" +msgstr "specificati 'full' e 'subset'; si utilizzerà 'subset'" + +msgid "'full' must be FALSE, TRUE, or a number in [0, 1]" +msgstr "'full' dev'essere FALSE, TRUE, o un numero nell'intervallo [0, 1]" + +msgid "'x' must only have integer codes" +msgstr "'x' deve avere unicamente codici interi" + +msgid "Need either a dissimilarity 'dist' or diss.matrix 'dmatrix'" +msgstr "Necessaria una differenza \"dist\" o una diss.matrix \"dmatrix\"" + +msgid "'dmatrix' is not a dissimilarity matrix compatible to 'x'" +msgstr "'dmatrix' non è una matrice di dissomiglianza compatibile con 'x'" + +msgid "clustering 'x' and dissimilarity 'dist' are incompatible" +msgstr "il clustering 'x' e le dissimilarità 'dist' sono incompatibili" + +msgid "invalid silhouette structure" +msgstr "struttura silhouette non valida" + +msgid "invalid 'silhouette' object" +msgstr "oggetto 'silhouette' non valido" + +msgid "No valid silhouette information (#{clusters} =? 1)" +msgstr "Nessuna informazione valida di silhouette (#{clusters} =? 1)" + +msgid "Observation %s has *only* NAs --> omit it for clustering" +msgid_plural "Observations %s have *only* NAs --> omit them for clustering!" +msgstr[0] "L'osservazione %s ha *solo* NA --> omettetela dall'analisi" +msgstr[1] "Le osservazioni %s hanno *solo* NA --> omettetele dall'analisi!" + +msgid "%d observation (%s) has *only* NAs --> omit them for clustering!" +msgid_plural "" +"%d observations (%s ...) have *only* NAs --> omit them for clustering!" +msgstr[0] "%d osservazione (%s) ha *solo* NA --> omettetela dall'analisi!" +msgstr[1] "%d osservazioni (%s) hanno *solo* NA --> omettetele dall'analisi!" + +msgid "setting 'logical' variable %s to type 'asymm'" +msgid_plural "setting 'logical' variables %s to type 'asymm'" +msgstr[0] "configurazione della variabile 'logical' %s nel tipo 'asymm'" +msgstr[1] "configurazione delle variabili 'logical' %s nel tipo 'asymm'" diff -Nru cluster-2.1.0/po/R-ko.po cluster-2.1.2/po/R-ko.po --- cluster-2.1.0/po/R-ko.po 2018-04-06 21:29:03.000000000 +0000 +++ cluster-2.1.2/po/R-ko.po 2021-01-30 21:26:05.000000000 +0000 @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: cluster 1.15.2\n" -"POT-Creation-Date: 2018-04-06 23:26\n" +"POT-Creation-Date: 2021-01-30 22:00\n" "PO-Revision-Date: 2015-02-06 21:56-0600\n" "Last-Translator:Chel Hee Lee \n" "Language-Team: Chel Hee Lee \n" @@ -272,6 +272,9 @@ "군집(clusters)의 개수 'k'는 반드시 {1,2, .., n-1}내에 존재해야 하므로 n >= 2 " "입니다." +msgid "Set either 'variant' or 'pamonce', but not both" +msgstr "" + msgid "" "'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d" msgstr "" @@ -324,8 +327,9 @@ msgid "NA-values are not allowed in clustering vector" msgstr "군집벡터(clustering vector)에서는 NA가 허용되지 않습니다." +#, fuzzy msgid "" -"Error in Fortran routine for the spanning ellipsoid,\n" +"Error in C routine for the spanning ellipsoid,\n" " rank problem??" msgstr "" "스패닝 타원(spanning ellipsoid)를 생성하는 포트란 루틴(Fortran routine)에서 " @@ -352,6 +356,12 @@ "full silhouette는 'clara(*, keep.data = TRUE)'의 결과만에 오로지 사용할 수 있" "습니다." +msgid "specified both 'full' and 'subset'; will use 'subset'" +msgstr "" + +msgid "'full' must be FALSE, TRUE, or a number in [0, 1]" +msgstr "" + msgid "'x' must only have integer codes" msgstr "'x'는 오로지 정수형 코드(codes)만을 가질 수 있습니다." diff -Nru cluster-2.1.0/po/R-lt.po cluster-2.1.2/po/R-lt.po --- cluster-2.1.0/po/R-lt.po 1970-01-01 00:00:00.000000000 +0000 +++ cluster-2.1.2/po/R-lt.po 2021-04-15 07:23:31.000000000 +0000 @@ -0,0 +1,355 @@ +msgid "" +msgstr "" +"Project-Id-Version: cluster 2.1.1\n" +"POT-Creation-Date: 2021-01-30 22:00\n" +"PO-Revision-Date: 2021-02-23 16:21+0200\n" +"Last-Translator: Gabrielė Stupurienė \n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && (n%100<11 || n%100>19) ? 0 : n" +"%10>=2 && n%10<=9 && (n%100<11 || n%100>19) ? 1 : 2);\n" + +msgid "invalid clustering method" +msgstr "neleistinas grupavimo metodas" + +msgid "ambiguous clustering method" +msgstr "neaiškus klasterizavimo metodas" + +msgid "'par.method' must be of length 1, 3, or 4" +msgstr "'par.method' turi būti 1, 3 arba 4 ilgio" + +msgid "NA-values in the dissimilarity matrix not allowed." +msgstr "NA reikšmės skirtumo matricoje neleidžiamos." + +msgid "'x' is not and cannot be converted to class \"dissimilarity\"" +msgstr "'x' nėra ir negali būti konvertuojamas į klasę \"dissimilarity\"" + +msgid "x is not a numeric dataframe or matrix." +msgstr "x nėra skaitinė duomenų sistema ar matrica." + +msgid "need at least 2 objects to cluster" +msgstr "reikia bent 2 objektų į klasterį" + +msgid "No clustering performed, NA-values in the dissimilarity matrix." +msgstr "Nebuvo atliktas grupavimas, NA reikšmės skirtumo matricoje." + +msgid "'x' is a \"dist\" object, but should be a data matrix or frame" +msgstr "" +"'x' yra \"dist\" objektas, bet turėtų būti duomenų matrica arba sistema" + +msgid "The number of cluster should be at least 1 and at most n-1." +msgstr "" +"Klasterio skaičius turi būti ne mažesnis kaip 1 ir ne daugiau kaip n-1." + +msgid "'sampsize' should be at least %d = max(2, 1+ number of clusters)" +msgstr "'sampsize' turi būti bent %d = max(2, 1+ klasterių skaičius)" + +msgid "'sampsize' = %d should not be larger than the number of objects, %d" +msgstr "'sampsize' = %d neturėtų būti didesnis už objektų skaičių, %d" + +msgid "'samples' should be at least 1" +msgstr "'samples' turėtų būti ne mažesni kaip 1" + +msgid "when 'medoids.x' is FALSE, 'keep.data' must be too" +msgstr "kai 'medoids.x' yra FALSE, 'keep.data' turi būti taip pat" + +msgid "" +"Distance computations with NAs: using correct instead of pre-2016 wrong " +"formula.\n" +"Use 'correct.d=FALSE' to get previous results or set 'correct.d=TRUE' " +"explicitly\n" +"to suppress this warning." +msgstr "" +"Atstumo skaičiavimai su NA: naudojant teisingą, o ne iki 2016 m. neteisingą " +"formulę.\n" +"Naudokite 'correct.d=FALSE', kad gautumėte ankstesnius rezultatus, arba " +"aiškiai nustatykite 'correct.d=TRUE', kad\n" +" slėpti šį įspėjimą." + +msgid "invalid 'correct.d'" +msgstr "neleistinas 'correct.d'" + +msgid "" +"Each of the random samples contains objects between which no distance can be " +"computed." +msgstr "" +"Kiekviename atsitiktinių pavyzdžių sudėtyje yra objektų, tarp kurių negalima " +"apskaičiuoti atstumo." + +msgid "" +"For each of the %d samples, at least one object was found which could not be " +"assigned to a cluster (because of missing values)." +msgstr "" +"Kiekvienam iš %d pavyzdžių buvo rastas bent vienas objektas, kurio nepavyko " +"priskirti klasteriui (dėl trūkstamų reikšmių)." + +msgid "invalid 'jstop' from .C(cl_clara,.):" +msgstr "negaliojantis 'jstop' iš .C(cl_clara,.):" + +msgid "'B' has to be a positive integer" +msgstr "'B' turi būti teigiamas skaičius" + +msgid "invalid 'spaceH0':" +msgstr "neleistinas 'spaceH0':" + +msgid "index has to be a function or a list of function" +msgstr "indeksas turi būti funkcija arba funkcijų sąrašas" + +msgid "invalid 'twins' object" +msgstr "neleistinas 'twins' objektas" + +msgid "x is not a dataframe or a numeric matrix." +msgstr "x nėra duomenų sistema arba skaitinė matrica." + +msgid "invalid %s; must be named list" +msgstr "negaliojantys %s; turi būti įvardytas sąrašas" + +msgid "%s has invalid column names" +msgstr "%s turi neleistinus stulpelių pavadinimus" + +msgid "%s must be in 1:ncol(x)" +msgstr "%s turi būti 1:ncol(x)" + +msgid "%s must contain column names or numbers" +msgstr "%s turi būti stulpelių pavadinimai arba skaičiai" + +msgid "at least one binary variable has more than 2 levels." +msgstr "bent vienas dvejetainis kintamasis turi daugiau nei 2 lygius." + +msgid "at least one binary variable has not 2 different levels." +msgstr "bent vienas dvejetainis kintamasis neturi 2 skirtingų lygių." + +msgid "at least one binary variable has values not in {0,1,NA}" +msgstr "bent vieno dvejetainio kintamojo reikšmės nėra {0,1,NA}" + +msgid "binary variable(s) %s treated as interval scaled" +msgstr "" +"dvejetainis kintamasis (-ieji) %s traktuojamas (-i) kaip intervalo mastelis" + +msgid "%s has constant columns %s; these are standardized to 0" +msgstr "%s turi pastovius stulpelius %s; jie standartizuojami į 0" + +msgid "with mixed variables, metric \"gower\" is used automatically" +msgstr "su mišriais kintamaisiais, metrika \"gower\" naudojama automatiškai" + +msgid "'weights' must be of length p (or 1)" +msgstr "'weights' ilgis turi būti p (arba 1)" + +msgid "invalid type %s for column numbers %s" +msgstr "neleistinas tipas %s stulpelių numeriams %s" + +msgid "NA values in the dissimilarity matrix not allowed." +msgstr "NA reikšmės skirtumo matricoje neleidžiamos." + +msgid "No clustering performed, NA's in dissimilarity matrix." +msgstr "Nebuvo atliktas grupavimas, NA skirtumo matricoje." + +msgid "'x' must be numeric n x p matrix" +msgstr "'x' turi būti skaitinė [n x p] matrica" + +msgid "omitting NAs" +msgstr "praleidžiami NA" + +msgid "no points without missing values" +msgstr "nėra taškų be trūkstamų reikšmių" + +msgid "computed some negative or all 0 probabilities" +msgstr "apskaičiavo kai kurias neigiamas arba visas 0 tikimybes" + +msgid "algorithm possibly not converged in %d iterations" +msgstr "algoritmas galbūt nekonvergavo %d iteracijose" + +msgid "'A' must be p x p cov-matrix defining an ellipsoid" +msgstr "'A' turi būti [p x p] kovariacijos matrica, apibrėžianti elipsoidą" + +msgid "ellipsoidPoints() not yet implemented for p >= 3 dim." +msgstr "ellipsoidPoints() dar neįgyvendintas p > = 3 dim." + +msgid "'k' (number of clusters) must be in {1,2, .., n/2 -1}" +msgstr "'k' (klasterių skaičius) turi būti {1,2, .., n/2 -1}" + +msgid "'memb.exp' must be a finite number > 1" +msgstr "'memb.exp' turi būti baigtinis skaičius > 1" + +msgid "'maxit' must be non-negative integer" +msgstr "'maxit' turi būti ne neigiamas sveikasis skaičius" + +msgid "'iniMem.p' must be a nonnegative n * k matrix with rowSums == 1" +msgstr "'iniMem.p' turi būti ne neigiama [n * k] matrica su rowSums == 1" + +msgid "FANNY algorithm has not converged in 'maxit' = %d iterations" +msgstr "FANNY algoritmas nekonvergavo 'maxit' = %d iteracijose" + +msgid "the memberships are all very close to 1/k. Maybe decrease 'memb.exp' ?" +msgstr "visos priklausomybės yra labai artimos 1/k. Gal sumažinti 'memb.exp' ?" + +msgid "'m', a membership matrix, must be nonnegative with rowSums == 1" +msgstr "'m', priklausomybių matrica, turi būti neneigiama su rowSums == 1" + +msgid "'n' must be >= 2" +msgstr "'n' turi būti >= 2" + +msgid "x must be a matrix or data frame." +msgstr "x turi būti matrica arba duomenų sistema." + +msgid "" +"All variables must be binary (e.g., a factor with 2 levels, both present)." +msgstr "" +"Visi kintamieji turi būti dvejetainiai (pvz., koeficientas su 2 lygiais)." + +msgid "mona() needs at least p >= 2 variables (in current implementation)" +msgstr "mona() reikia bent p > = 2 kintamųjų (dabartiniame įgyvendinime)" + +msgid "No clustering performed, an object was found with all values missing." +msgstr "" +"Grupavimas nebuvo atliktas, rastas objektas su visomis trūkstamomis " +"reikšmėmis." + +msgid "" +"No clustering performed, found variable with more than half values missing." +msgstr "" +"Nebuvo atliktas grupavimas, rastas kintamasis, kuriame trūksta daugiau nei " +"pusės reikšmių." + +msgid "" +"No clustering performed, a variable was found with all non missing values " +"identical." +msgstr "" +"Grupavimas neatliktas, rastas kintamasis su visomis identiškomis " +"netrūkstamomis reikšmėmis." + +msgid "No clustering performed, all variables have at least one missing value." +msgstr "" +"Grupavimas nebuvo atliktas, visi kintamieji turi bent vieną trūkstamą " +"reikšmę." + +msgid "Cannot keep data when 'x' is a dissimilarity!" +msgstr "Negalima saugoti duomenų, kai 'x' yra skirtumas!" + +msgid "have %d observations, but not more than %d are allowed" +msgstr "turi %d pastabų, tačiau leidžiama ne daugiau kaip %d" + +msgid "Number of clusters 'k' must be in {1,2, .., n-1}; hence n >= 2" +msgstr "Klasterių skaičius 'k' turi būti {1,2, .., n-1}; taigi n >= 2" + +msgid "Set either 'variant' or 'pamonce', but not both" +msgstr "Nustatykite 'variant' arba 'pamonce', bet ne abu" + +msgid "" +"'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d" +msgstr "'medoids' turi būti NULL arba %d indeksai { 1,2, .., n}, n=%d" + +msgid "No clustering performed, NAs in the computed dissimilarity matrix." +msgstr "Nebuvo atliktas grupavimas, NA apskaičiuotoje skirtumo matricoje." + +msgid "error from .C(cl_pam, *): invalid medID's" +msgstr "klaida iš . C(cl_pam, *): negaliojantis medID" + +msgid "NA-values are not allowed in dist-like 'x'." +msgstr "NA reikšmės neleidžiamos dist kaip 'x'." + +msgid "Distances must be result of dist or a square matrix." +msgstr "Atstumai turi būti dist rezultatas arba kvadratinė matrica." + +msgid "the square matrix is not symmetric." +msgstr "kvadratinė matrica nėra simetriška." + +msgid ">>>>> funny case in clusplot.default() -- please report!" +msgstr ">>>>> keistas atvejis clusplot.default() - prašome pranešti!" + +msgid "x is not a data matrix" +msgstr "x nėra duomenų matrica" + +msgid "one or more objects contain only missing values" +msgstr "viename ar daugiau objektų yra tik trūkstamos reikšmės" + +msgid "one or more variables contain only missing values" +msgstr "viename ar daugiau kintamųjų yra tik trūkstamos reikšmės" + +msgid "" +"Missing values were displaced by the median of the corresponding variable(s)" +msgstr "" +"Trūkstamos reikšmės buvo perkeltos iš atitinkamo (-ų) kintamojo (-ų) medianos" + +msgid "x is not numeric" +msgstr "x nėra skaitinis" + +msgid "The clustering vector is of incorrect length" +msgstr "Grupavimo vektorius yra netinkamo ilgio" + +msgid "NA-values are not allowed in clustering vector" +msgstr "NA reikšmės neleidžiamos grupavimo vektoriuje" + +msgid "" +"Error in C routine for the spanning ellipsoid,\n" +" rank problem??" +msgstr "" +"Aprėpiančio elipsoido, esančio C programoje klaida,\n" +" rango problema??" + +msgid "'col.clus' should have length 4 when color is TRUE" +msgstr "'col.clus' turi būti ilgis 4, kai spalva yra TRUE" + +msgid "no diss nor data found, nor the original argument of %s" +msgstr "nerasta nei diss, nei duomenų, nei pradinio %s argumento" + +msgid "no diss nor data found for clusplot()'" +msgstr "nerasta jokių diss ir clusplot()' duomenų" + +msgid "invalid partition object" +msgstr "neleistinas skaidinio objektas" + +msgid "" +"full silhouette is only available for results of 'clara(*, keep.data = TRUE)'" +msgstr "" +"visas siluetas prieinamas tik 'clara(*, keep.data = TRUE)' rezultatams." + +msgid "specified both 'full' and 'subset'; will use 'subset'" +msgstr "nurodyti abu 'full' ir 'subset'; bus naudojamas 'subset'" + +msgid "'full' must be FALSE, TRUE, or a number in [0, 1]" +msgstr "'full' turi būti FALSE, TRUE arba skaičius [0, 1]" + +msgid "'x' must only have integer codes" +msgstr "'x' turi turėti tik sveikuosius kodus" + +msgid "Need either a dissimilarity 'dist' or diss.matrix 'dmatrix'" +msgstr "Reikia arba skirtumo 'dist' arba diss.matrix 'dmatrix'" + +msgid "'dmatrix' is not a dissimilarity matrix compatible to 'x'" +msgstr "'dmatrix' nėra skirtumų matrica, suderinama su 'x'" + +msgid "clustering 'x' and dissimilarity 'dist' are incompatible" +msgstr "grupavimas 'x' ir skirtumas 'dist' yra nesuderinami" + +msgid "invalid silhouette structure" +msgstr "netinkama silueto struktūra" + +msgid "invalid 'silhouette' object" +msgstr "neleistinas 'silhouette' objektas" + +msgid "No valid silhouette information (#{clusters} =? 1)" +msgstr "Nėra galiojančios silueto informacijos (#{clusters} =? 1)" + +msgid "Observation %s has *only* NAs --> omit it for clustering" +msgid_plural "Observations %s have *only* NAs --> omit them for clustering!" +msgstr[0] "Stebėjimas %s turi * tik * NA -- > praleisti jį grupavimui" +msgstr[1] "Stebėjimai %s turi * tik * NA -- > praleisti jį grupavimui!" +msgstr[2] "Stebėjimų %s turi * tik * NA -- > praleisti jį grupavimui!" + +msgid "%d observation (%s) has *only* NAs --> omit them for clustering!" +msgid_plural "" +"%d observations (%s ...) have *only* NAs --> omit them for clustering!" +msgstr[0] "%d stebėjimas (%s) turi * tik * NA -- > praleisti juos grupavimui!" +msgstr[1] "%d stebėjimai (%s) turi * tik * NA -- > praleisti juos grupavimui!" +msgstr[2] "%d stebėjimų (%s) turi * tik * NA -- > praleisti juos grupavimui!" + +msgid "setting 'logical' variable %s to type 'asymm'" +msgid_plural "setting 'logical' variables %s to type 'asymm'" +msgstr[0] "'logical' kintamojo %s nustatymas į tipą 'asymm'" +msgstr[1] "'logical' kintamųjų %s nustatymas į tipą 'asymm'" +msgstr[2] "'logical' kintamųjų %s nustatymas į tipą 'asymm'" diff -Nru cluster-2.1.0/po/R-pl.po cluster-2.1.2/po/R-pl.po --- cluster-2.1.0/po/R-pl.po 2018-04-06 21:29:03.000000000 +0000 +++ cluster-2.1.2/po/R-pl.po 2021-01-30 21:26:05.000000000 +0000 @@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: cluster 1.15.1\n" "Report-Msgid-Bugs-To: bugs.r-project.org\n" -"POT-Creation-Date: 2018-04-06 23:26\n" +"POT-Creation-Date: 2021-01-30 22:00\n" "PO-Revision-Date: 2014-03-27 17:34+0100\n" "Last-Translator: Łukasz Daniel \n" "Language-Team: Łukasz Daniel \n" @@ -385,6 +385,9 @@ msgstr "" "Liczba grup 'k' musi zawierać się w zbiorze {1,2, .., n-1}; tak więc n >= 2" +msgid "Set either 'variant' or 'pamonce', but not both" +msgstr "" + # cluster/R/pam.R: 64 # stop(gettextf("'medoids' must be NULL or vector of %d distinct indices in {1,2, .., n}, n=%d", k, n)) msgid "" @@ -463,8 +466,9 @@ # cluster/R/plotpart.R: 303 # warning("Error in Fortran routine for the spanning ellipsoid,\n rank problem??") +#, fuzzy msgid "" -"Error in Fortran routine for the spanning ellipsoid,\n" +"Error in C routine for the spanning ellipsoid,\n" " rank problem??" msgstr "" "Błąd w procedurze Fortran dla elipsoidy obejmującej,\n" @@ -498,6 +502,12 @@ msgstr "" "pełna sylwetka jest dostępna jedynie dla wyników 'clara(*, keep.data = TRUE)'" +msgid "specified both 'full' and 'subset'; will use 'subset'" +msgstr "" + +msgid "'full' must be FALSE, TRUE, or a number in [0, 1]" +msgstr "" + # cluster/R/silhouette.R: 35 # stop("'x' must only have integer codes") # cluster/R/silhouette.R: 82 diff -Nru cluster-2.1.0/po/update-me.sh cluster-2.1.2/po/update-me.sh --- cluster-2.1.0/po/update-me.sh 2015-07-20 08:32:15.000000000 +0000 +++ cluster-2.1.2/po/update-me.sh 2021-04-15 07:23:31.000000000 +0000 @@ -19,11 +19,13 @@ Rcd="require('tools'); update_pkg_po('$pkgDIR')" ## -------------------------------- as of R 3.0.0 echo $Rcd > $L -echo $Rcd | $R --slave 2>&1 | tee -a $L +echo $Rcd | $R --no-echo 2>&1 | tee -a $L echo 'end{make pkg-update}' ; echo '' echo 'Test with (e.g.)' echo ' LANGUAGE=de R --no-environ --no-save' ; echo '' echo 'and then something like' echo ' Matrix(1:6, 2,3) %*% Matrix(1:4, 2)'; echo '' -echo 'Commit with something like' +echo 'Do check that you did *not* forget one of the *.po or generated *.mo files, via'; echo '' +echo " svn st -v po inst/po | grep '^?'"; echo '' +echo 'and commit with something like' echo " svn ci -m'translation updates' po inst/po"; echo '' diff -Nru cluster-2.1.0/R/clara.q cluster-2.1.2/R/clara.q --- cluster-2.1.0/R/clara.q 2018-03-29 14:44:04.000000000 +0000 +++ cluster-2.1.2/R/clara.q 2020-04-30 11:40:04.000000000 +0000 @@ -4,7 +4,7 @@ clara <- function(x, k, metric = c("euclidean", "manhattan", "jaccard"), - stand = FALSE, + stand = FALSE, cluster.only = FALSE, samples = 5, sampsize = min(n, 40 + 2 * k), trace = 0, medoids.x = TRUE, keep.data = medoids.x, rngR = FALSE, pamLike = FALSE, correct.d = TRUE) @@ -90,7 +90,8 @@ jstop = integer(1), as.integer(trace), # = trace_lev double (3 * sampsize), # = tmp ## 33 - integer(6 * sampsize)) # = itmp + integer(6 * sampsize) # = itmp + )[if(cluster.only) c("clu", "jstop") else substitute()] # empty index: ## give a warning when errors occured ## res[] components really used below: ## jstop, clu, silinf, dis, sample, med, imed, obj, size, maxis, avdis, ratdis, @@ -118,8 +119,11 @@ ## else {cannot happen} stop("invalid 'jstop' from .C(cl_clara,.): ", res$jstop) } - ## 'res$clu' is still large; cut down ASAP - res$clu <- as.integer(res$clu[1:n]) + ## 'res$clu' is potentially too large; cut down ASAP + clustering <- as.integer(res$clu[1:n]) + if(!is.null(namx)) names(clustering) <- namx + if(cluster.only) + return(clustering) sildim <- res$silinf[, 4] ## adapt C output to S: ## convert lower matrix, read by rows, to upper matrix, read by rows. @@ -133,12 +137,11 @@ res$med <- if(medoids.x) ox[res$imed, , drop = FALSE] ## add labels to C output if(!is.null(namx)) { - sildim <- namx[sildim] + sildim <- namx[sildim] res$sample <- namx[res$sample] - names(res$clu) <- namx } r <- list(sample = res$sample, medoids = res$med, i.med = res$imed, - clustering = res$clu, objective = res$obj, + clustering = clustering, objective = res$obj, clusinfo = cbind(size = res$size, "max_diss" = res$maxdis, "av_diss" = res$avdis, isolation = res$ratdis), diss = disv, call = match.call()) diff -Nru cluster-2.1.0/R/pam.q cluster-2.1.2/R/pam.q --- cluster-2.1.0/R/pam.q 2018-03-29 14:44:04.000000000 +0000 +++ cluster-2.1.2/R/pam.q 2021-01-30 21:27:20.000000000 +0000 @@ -1,11 +1,13 @@ #### PAM : Partitioning Around Medoids -#### --- $Id: pam.q 7509 2018-03-29 14:44:04Z maechler $ +#### --- $Id: pam.q 7920 2021-01-30 21:27:20Z maechler $ pam <- function(x, k, diss = inherits(x, "dist"), metric = c("euclidean", "manhattan"), ## FIXME: add "jaccard" - medoids = NULL, + medoids = if(is.numeric(nstart)) "random", + nstart = if(variant == "faster") 1L else NA, stand = FALSE, cluster.only = FALSE, do.swap = TRUE, keep.diss = !diss && !cluster.only && n < 100, keep.data = !diss && !cluster.only, + variant = c("original", "o_1", "o_2", "f_3", "f_4", "f_5", "faster"), pamonce = FALSE, trace.lev = 0) { stopifnot(length(cluster.only) == 1, length(trace.lev) == 1) @@ -64,8 +66,21 @@ storage.mode(x2) <- "double" } if((k <- as.integer(k)) < 1 || k >= n) - stop("Number of clusters 'k' must be in {1,2, .., n-1}; hence n >= 2") - if(!is.null(medoids)) { # non-default: check provided medoids + stop("Number of clusters 'k' must be in {1,2, .., n-1}; hence n >= 2") + missVari <- missing(variant) + variant <- match.arg(variant) # incl. validity check + if(!missVari) { + if(!missing(pamonce)) + stop("Set either 'variant' or 'pamonce', but not both") + pamonce <- -1L + ## 0 1 2 3 4 5 6 + match(variant, c("original", "o_1", "o_2", "f_3", "f_4", "f_5", "faster")) + if(missing(medoids) && variant == "faster") + medoids <- "random" + } ## else if(!missing(pamonce)) Deprecated("use 'variant' instead") + + if(randIni <- identical("random", medoids)) + medoids <- sample.int(n, k) + else if(!is.null(medoids)) { # non-default: check provided medoids ## 'fixme': consider sort(medoids) {and rely on it in ../src/pam.c } if(!is.integer(medoids)) medoids <- as.integer(medoids) @@ -79,7 +94,8 @@ nisol <- integer(if(cluster.only) 1 else k) if(do.swap) nisol[1] <- 1L - res <- .Call(cl_Pam, k, n, + pamDo <- function(medoids) { + .Call(cl_Pam, k, n, !diss, # == do_diss: compute d[i,j] them from x2[] and allocate in C if(diss) dv else x2, !cluster.only, ## == all_stats == "old" obj[1+ 0] == 0 @@ -89,10 +105,29 @@ if(mdata) rep(valmisdat, jp) else double(1), # valmd if(mdata) jtmd else integer(jp), # jtmd ndyst) # dist_kind + } - ## Error if have NA's in diss: - if(!diss && is.integer(res)) - stop("No clustering performed, NAs in the computed dissimilarity matrix.") + if(randIni && nstart >= 2) { + it <- 0L + res <- pamDo(medoids) + ## Error if have NA's in diss: + if(!diss && is.integer(res)) + stop("No clustering performed, NAs in the computed dissimilarity matrix.") + for(it in 2:nstart) { + r <- pamDo(medoids = sample.int(n, k)) + if(r$obj[2] < res$obj[2]) { + if(trace.lev) + cat(sprintf("Found better objective, %g < %g (it=%d)\n", + r$obj[2], res$obj[2], it)) + res <- r + } + } + } else { # just once + res <- pamDo(medoids) + ## Error if have NA's in diss: + if(!diss && is.integer(res)) + stop("No clustering performed, NAs in the computed dissimilarity matrix.") + } xLab <- if(diss) attr(x, "Labels") else dimnames(x)[[1]] r.clu <- res$clu @@ -161,6 +196,32 @@ r } +### From Schubert, Dec 2020 --- but MM decides to rather implement pam(*, variant = "faster") +if(FALSE) ## FasterPAM : Faster Partitioning Around Medoids +fasterpam <- function(x, k, diss = inherits(x, "dist"), + metric = c("euclidean", "manhattan"), ## FIXME: add "jaccard" + medoids = NULL, + stand = FALSE, cluster.only = FALSE, # do.swap = TRUE, ## (not here) + keep.diss = !diss && !cluster.only && n < 100, + keep.data = !diss && !cluster.only, + ## pamonce = FALSE, ## (not here) + trace.lev = 0) +{ + if((diss <- as.logical(diss))) { + n <- attr(x, "Size") + } else { + n <- nrow(x) + } + if (is.null(medoids)) { + medoids = sample.int(n, k) + } + pam(x = x, k = k, diss = diss, metric = metric, medoids = medoids, + stand = stand, cluster.only = cluster.only, do.swap = TRUE, + keep.diss = keep.diss, keep.data = keep.data, pamonce = 6, trace.lev = trace.lev) +} + + + ## non-exported: .print.pam <- function(x, ...) { cat("Medoids:\n"); print(cbind(ID = x$id.med, x$medoids), ...) diff -Nru cluster-2.1.0/R/silhouette.R cluster-2.1.2/R/silhouette.R --- cluster-2.1.0/R/silhouette.R 2014-12-23 22:43:50.000000000 +0000 +++ cluster-2.1.2/R/silhouette.R 2020-05-07 13:44:01.000000000 +0000 @@ -11,19 +11,36 @@ r } -silhouette.clara <- function(x, full = FALSE, ...) +silhouette.clara <- function(x, full = FALSE, subset = NULL, ...) { - if(!full) + cll <- sys.call() + n <- length(x$clustering) + sampsize <- length(x$sample) ## == attr(x$diss, "Size") + if(is.null(subset) && full < sampsize / n) # use the (sub) sample in clara() return(NextMethod()) ##-> silh*.partition() - ## else : full = TRUE + ## else : full = TRUE or full is number in (0, 1] if(is.null(x$data)) stop("full silhouette is only available for results of 'clara(*, keep.data = TRUE)'") - ## Compute "full" silhouette -- from clustering + full distances: - r <- silhouette(x$clustering, - daisy(x$data, metric = attr(x, "Metric"))) - attr(r, "call") <- - substitute(silhouette(CL, full = TRUE), list(CL = x$call)) + use.subset <- length(subset) >= min(10, n) && all(1 <= subset & subset <= n) + if(use.subset && !missing(full)) + warning("specified both 'full' and 'subset'; will use 'subset'") + else if(!isTRUE(full) && + !(is.numeric(full) && length(full) == 1 && 0 < full && full <= 1)) + stop("'full' must be FALSE, TRUE, or a number in [0, 1]") + ## Compute "full" or 'subset' silhouette -- from clustering + full distances: + if(!use.subset && !isTRUE(full)) ## choose random + subset <- sample.int(n, size = full*n) + r <- + if(isTRUE(full)) + silhouette(x$clustering, daisy(x$data, metric = attr(x, "Metric"))) + else + silhouette(x$clustering[subset], daisy(x$data[subset, ,drop=FALSE], + metric = attr(x, "Metric"))) + cll[[2]] <- x$call + attr(r, "call") <- cll + ## substitute(silhouette(CL, full = FULL, subset = SUBS), + ## list(CL = x$call, FULL = full, SUBS = subset)) r } diff -Nru cluster-2.1.0/README cluster-2.1.2/README --- cluster-2.1.0/README 2016-06-23 00:42:33.000000000 +0000 +++ cluster-2.1.2/README 2020-05-07 13:44:01.000000000 +0000 @@ -36,6 +36,8 @@ 8b) Think about "merging" the plot.agnes and plot.diana methods. + + ------------------ Martin , since 1999 diff -Nru cluster-2.1.0/src/init.c cluster-2.1.2/src/init.c --- cluster-2.1.0/src/init.c 2018-03-29 14:44:04.000000000 +0000 +++ cluster-2.1.2/src/init.c 2021-04-14 10:44:18.000000000 +0000 @@ -5,15 +5,15 @@ #include -#define CDEF(name) {#name, (DL_FUNC) &name, sizeof(name ## _t)/sizeof(name ## _t[0]), name ##_t} +#define CDEF(name) {#name, (DL_FUNC) &name, sizeof(name ## _typ)/sizeof(name ## _typ[0]), name ##_typ} #define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} -static R_NativePrimitiveArgType R_bncoef_t[3] = { +static R_NativePrimitiveArgType R_bncoef_typ[3] = { INTSXP, REALSXP, REALSXP }; -static R_NativePrimitiveArgType cl_clara_t[34] = { +static R_NativePrimitiveArgType cl_clara_typ[34] = { /*n:*/ INTSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, INTSXP, /*valmd:*/ REALSXP, INTSXP, INTSXP, /* rng_R: */ LGLSXP, /* pam_like:*/ LGLSXP, /*d_flag:*/ INTSXP, @@ -23,7 +23,7 @@ /*tmp: */ REALSXP,INTSXP }; -static R_NativePrimitiveArgType cl_fanny_t[27] = { +static R_NativePrimitiveArgType cl_fanny_typ[27] = { INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, /*jdyss: */ INTSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, /*negbr: */ INTSXP, /*syl: */ REALSXP, REALSXP, REALSXP, REALSXP, @@ -32,7 +32,7 @@ }; #ifdef _UNUSED_C_pam -static R_NativePrimitiveArgType cl_pam_t[24] = { +static R_NativePrimitiveArgType cl_pam_typ[24] = { INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, /*jdyss: */ INTSXP, REALSXP, INTSXP, INTSXP, INTSXP, /*nrepr: */ LGLSXP, INTSXP, /*radus: */ REALSXP, REALSXP, REALSXP, REALSXP, @@ -41,17 +41,17 @@ }; #endif -static R_NativePrimitiveArgType spannel_t[12] = { // ./spannel.c : +static R_NativePrimitiveArgType spannel_typ[12] = { // ./spannel.c : INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, REALSXP, /*varss: */ REALSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP }; -static R_NativePrimitiveArgType sildist_t[] = { +static R_NativePrimitiveArgType sildist_typ[] = { REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, INTSXP, /* si: */ REALSXP, INTSXP, LGLSXP }; -static R_NativePrimitiveArgType twins_t[18] = { +static R_NativePrimitiveArgType twins_typ[18] = { INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, /* jdiss: */ INTSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, @@ -60,7 +60,7 @@ }; /* is only .C()-called from ../tests/sweep-ex.R : */ -static R_NativePrimitiveArgType cl_sweep_t[5] = { +static R_NativePrimitiveArgType cl_sweep_typ[5] = { REALSXP, INTSXP, INTSXP, INTSXP, REALSXP }; diff -Nru cluster-2.1.0/src/pam.c cluster-2.1.2/src/pam.c --- cluster-2.1.0/src/pam.c 2019-04-01 16:09:16.000000000 +0000 +++ cluster-2.1.2/src/pam.c 2021-01-30 21:27:20.000000000 +0000 @@ -317,7 +317,7 @@ dysma[i] = s; if(med_given) { - if(trace_lev) Rprintf("medoids given\n"); + if(trace_lev) Rprintf("medoids given; "); /* compute dysma[] : dysma[j] = D(j, nearest_representative) */ for (i = 1; i <= n; ++i) { @@ -329,9 +329,7 @@ } } } - else { - -/* ====== first algorithm: BUILD. ====== */ + else { // ====== first algorithm: BUILD. ====================== if(trace_lev) Rprintf("build %d medoids:\n", kk); @@ -400,7 +398,7 @@ double dzsky; int hbest = -1, nbest = -1, kbest= -1; // -Wall - int *medoids, *clustmembership; + int *medoids, *clustmembership, *clustmembershipb; double *fvect; if(pamonce) { // +1 --> use 1-based indices (as R) @@ -415,6 +413,7 @@ } } else { // -Wall : clustmembership = medoids = (int*) NULL; + clustmembershipb = medoids = (int*) NULL; fvect = (double*) NULL; } int *best_h = NULL; double *best_d = NULL; @@ -422,15 +421,24 @@ best_h = (int*) R_alloc(kk+1, sizeof(int)); best_d = (double*) R_alloc(kk+1, sizeof(double)); } + // Improvement part of Schubert and Rousseeuw 2021 FasterPAM + double *remove_loss = NULL; + if (pamonce >= 3 && pamonce <= 6) { + remove_loss = (double*) R_alloc(kk+1, sizeof(double)); + clustmembershipb = (int*) R_alloc(n+1, sizeof(int)); + } /* ====== second algorithm: SWAP. ====== */ /* Hmm: In the following, we RE-compute dysma[]; * don't need it first time; then only need *update* after swap */ + // Used by FasterPAM only (Schubert and Rousseeuw 2021, pamonce = 6) + int lastswap = 0; + /*-- Loop : */ L60: - if(pamonce == 0) { // original algorihtm + if(pamonce == 0) { // original algorithm for (j = 1; j <= n; ++j) { /* dysma[j] := D_j d(j, ) [KR p.102, 104] * dysmb[j] := E_j d(j, <2-nd cl.medi>) [p.103] */ @@ -448,24 +456,25 @@ } } } - } else if (pamonce >= 3 && pamonce <= 5) { // Schubert and Rousseeuw 2019 FastPAM1/2 + } else if (pamonce >= 3 && pamonce <= 6) { // Schubert and Rousseeuw 2019 FastPAM1/2 for (j = 1; j <= n; ++j) { /* dysma[j] := D_j d(j, ) [KR p.102, 104] * dysmb[j] := E_j d(j, <2-nd cl.medi>) [p.103] */ - dysma[j] = s; - dysmb[j] = s; + double dysmaj = s, dysmbj = s; for(k = 1; k <= kk; k++) { - i = medoids[k]; - ij = ind_2(i, j); - if (dysma[j] > dys[ij]) { - //store cluster membership + double dysij = dys[ind_2(medoids[k], j)]; + if (dysmaj > dysij) { + clustmembershipb[j] = clustmembership[j]; + dysmbj = dysmaj; clustmembership[j] = k; // Use medoid k, not i - dysmb[j] = dysma[j]; - dysma[j] = dys[ij]; - } else if (dysmb[j] > dys[ij]) { - dysmb[j] = dys[ij]; + dysmaj = dysij; + } else if (dysmbj > dysij) { + clustmembershipb[j] = k; + dysmbj = dysij; } } + dysma[j] = dysmaj; + dysmb[j] = dysmbj; } } else { // pamonce == 1 or == 2 : for (j = 1; j <= n; ++j) { @@ -488,9 +497,11 @@ } } +// FasterPAM improvement: do not recompute the nearest, but update it in the end as necessary +L60b: dzsky = 1.; /* 1 is arbitrary > 0; only dzsky < 0 matters in the end */ - if(pamonce == 0) { // original algorihtm + if(pamonce == 0) { // original algorithm for (h = 1; h <= n; ++h) if (!nrepr[h]) { R_CheckUserInterrupt(); for (i = 1; i <= n; ++i) if (nrepr[i]) { @@ -573,152 +584,201 @@ } } } - } else if (pamonce == 3) { // Schubert and Rousseeuw 2019 FastPAM1 - // Now check possible new medoids h - for (h = 1; h <= n; ++h) if (!nrepr[h]) { - R_CheckUserInterrupt(); - { /* Cost for making point h a medoid:*/ - double dist_h = dysma[h]; + } else if (pamonce >= 3 && pamonce <= 6) { // Schubert and Rousseeuw variants + // cost of removing current medoids + for(k = 1; k <= kk; k++) + remove_loss[k] = 0; + for (j = 1; j <= n; ++j) + remove_loss[clustmembership[j]] += dysmb[j] - dysma[j]; + + if (pamonce == 3) { // Schubert and Rousseeuw 2019 FastPAM1 -- improved 2021 version + // Now check possible new medoids h + for (h = 1; h <= n; ++h) if (!nrepr[h]) { + R_CheckUserInterrupt(); for(k = 1; k <= kk; k++) - beter[k] = -dist_h; - } - // Compute gain of substituting h for each other medoid: - for (j = 1; j <= n; ++j) if (j != h) { + beter[k] = 0; + double acc = 0; + // Compute gain of substituting h for each other medoid: + for (j = 1; j <= n; ++j) { double dist_h = dys[ind_2(h, j)]; // New medoid int memb = clustmembership[j]; // Medoid nr of nearest double distcur = dysma[j]; // Nearest double distsec = dysmb[j]; // Second nearest - // Old closest was removed: - beter[memb] += (dist_h < distsec ? dist_h : distsec) - distcur; // New medoid is new best: - if (dist_h < distcur) { // O(1/k)*k => O(1) total runtime :-) - double delta = dist_h - distcur; - for(int k = 1; k <= kk; k++) if (k != memb) { - beter[k] += delta; - } + if (dist_h < distcur) { + acc += dist_h - distcur; + beter[memb] += distcur - distsec; + } else if (dist_h < distsec) { + beter[memb] += dist_h - distsec; + } } - } - for(k = 1; k <= kk; k++) - if (beter[k] < dzsky) { - dzsky = beter[k]; - hbest = h; - nbest = medoids[k]; - kbest = k; + for(k = 1; k <= kk; k++) { + double loss = beter[k] + acc + remove_loss[k]; + if (loss < dzsky) { + dzsky = loss; + hbest = h; + nbest = medoids[k]; + kbest = k; + } } - } - } else if (pamonce == 4) { // Schubert and Rousseeuw 2019 FastPAM2 - for(k = 1; k <= kk; k++) { - best_d[k] = 1.; // arbitrary > 0 - } - // Now check possible new medoids h - for (h = 1; h <= n; ++h) if (!nrepr[h]) { - R_CheckUserInterrupt(); - { /* Cost for making point h a medoid:*/ - double dist_h = dysma[h]; - for(k = 1; k <= kk; k++) - beter[k] = -dist_h; } - // Compute gain of substituting h for each other medoid: - for (j = 1; j <= n; ++j) if (j != h) { - double dist_h = dys[ind_2(h, j)]; // New medoid - int memb = clustmembership[j]; // Medoid nr of nearest - double distcur = dysma[j]; // Nearest - double distsec = dysmb[j]; // Second nearest - // Old closest was removed: - beter[memb] += (dist_h < distsec ? dist_h : distsec) - distcur; - // New medoid is new best: - if (dist_h < distcur) { // O(1/k)*k => O(1) total runtime :-) - double delta = dist_h - distcur; - for(int k = 1; k <= kk; k++) if (k != memb) { - beter[k] += delta; + } else if (pamonce == 4) { // Schubert and Rousseeuw 2019 FastPAM2 + for(k = 1; k <= kk; k++) { + best_d[k] = 1.; // arbitrary > 0 + } + // Now check possible new medoids h + for (h = 1; h <= n; ++h) if (!nrepr[h]) { + R_CheckUserInterrupt(); + for(k = 1; k <= kk; k++) + beter[k] = 0; + // Compute gain of substituting h for each other medoid: + double acc = 0; + for (j = 1; j <= n; ++j) { + double dist_h = dys[ind_2(h, j)]; // New medoid + int memb = clustmembership[j]; // Medoid nr of nearest + double distcur = dysma[j]; // Nearest + double distsec = dysmb[j]; // Second nearest + // New medoid is new best: + if (dist_h < distcur) { + acc += dist_h - distcur; + beter[memb] += distcur - distsec; + } else if (dist_h < distsec) { + beter[memb] += dist_h - distsec; + } + } + for(k = 1; k <= kk; k++) { + double loss = beter[k] + acc + remove_loss[k]; + if (loss < best_d[k]) { + best_d[k] = loss; + best_h[k] = h; } } } + // Pick one best medoid at the end (additional swaps come later). for(k = 1; k <= kk; k++) { - if (beter[k] < best_d[k]) { - best_d[k] = beter[k]; - best_h[k] = h; + if (best_d[k] < dzsky) { + dzsky = best_d[k]; + kbest = k; } } - } - // Pick one best medoid at the end (additional swaps come later). - for(k = 1; k <= kk; k++) { - if (best_d[k] < dzsky) { - dzsky = best_d[k]; - kbest = k; + hbest = best_h[kbest]; + nbest = medoids[kbest]; + } else if (pamonce == 5) { // Schubert and Rousseeuw 2019 FastPAM2, + // with linearized memory access as in Reynolds 2 + for(k = 1; k <= kk; k++) { + best_d[k] = 1.; // arbitrary > 0 } - } - hbest = best_h[kbest]; - nbest = medoids[kbest]; - } else if (pamonce == 5) { // Schubert and Rousseeuw 2019 FastPAM2, - // with linearized memory access as in Reynolds 2 - for(k = 1; k <= kk; k++) { - best_d[k] = 1.; // arbitrary > 0 - } - // Now check possible new medoids h - for (h = 1; h <= n; ++h) if (!nrepr[h]) { - R_CheckUserInterrupt(); - { /* Cost for making point h a medoid:*/ - double dist_h = dysma[h]; + // Now check possible new medoids h + for (h = 1; h <= n; ++h) if (!nrepr[h]) { + R_CheckUserInterrupt(); for(k = 1; k <= kk; k++) - beter[k] = -dist_h; - } - // Compute gain of substituting h for each other medoid: - int ijbase = (h-2)*(h-1)/2; - for (j = 1; j < h; ++j) { - double dist_h = dys[ijbase+j]; // New medoid - int memb = clustmembership[j]; // Medoid nr of nearest - double distcur = dysma[j]; // Nearest - double distsec = dysmb[j]; // Second nearest - // Old closest was removed: - beter[memb] += (dist_h < distsec ? dist_h : distsec) - distcur; - // New medoid is new best: - if (dist_h < distcur) { // O(1/k)*k => O(1) total runtime :-) - double delta = dist_h - distcur; - for(int k = 1; k < memb; k++) { - beter[k] += delta; - } - for(int k = memb + 1; k <= kk; k++) { - beter[k] += delta; + beter[k] = 0; + double acc = -dysma[h]; + beter[clustmembership[h]] = dysma[h] - dysmb[h]; + // Compute gain of substituting h for each other medoid: + int ijbase = (h-2)*(h-1)/2; + for (j = 1; j < h; ++j) { + double dist_h = dys[ijbase+j]; // New medoid + int memb = clustmembership[j]; // Medoid nr of nearest + double distcur = dysma[j]; // Nearest + double distsec = dysmb[j]; // Second nearest + // New medoid is new best: + if (dist_h < distcur) { + acc += dist_h - distcur; + beter[memb] += distcur - distsec; + } else if (dist_h < distsec) { + beter[memb] += dist_h - distsec; } } - } - ijbase += h;// = (h-2)*(h-1)/2 + h - for (j = h+1; j <= n; ++j) { - ijbase += j-2; - double dist_h = dys[ijbase]; // New medoid - int memb = clustmembership[j]; // Medoid nr of nearest - double distcur = dysma[j]; // Nearest - double distsec = dysmb[j]; // Second nearest - // Old closest was removed: - beter[memb] += (dist_h < distsec ? dist_h : distsec) - distcur; - // New medoid is new best: - if (dist_h < distcur) { // O(1/k)*k => O(1) total runtime :-) - double delta = dist_h - distcur; - for(int k = 1; k < memb; k++) { - beter[k] += delta; + ijbase += h;// = (h-2)*(h-1)/2 + h + for (j = h+1; j <= n; ++j) { + ijbase += j-2; + double dist_h = dys[ijbase]; // New medoid + int memb = clustmembership[j]; // Medoid nr of nearest + double distcur = dysma[j]; // Nearest + double distsec = dysmb[j]; // Second nearest + // New medoid is new best: + if (dist_h < distcur) { + acc += dist_h - distcur; + beter[memb] += distcur - distsec; + } else if (dist_h < distsec) { + beter[memb] += dist_h - distsec; } - for(int k = memb + 1; k <= kk; k++) { - beter[k] += delta; + } + for(k = 1; k <= kk; k++) { + double loss = beter[k] + acc + remove_loss[k]; + if (loss < best_d[k]) { + best_d[k] = loss; + best_h[k] = h; } } } + // Pick one best medoid at the end (additional swaps come later). for(k = 1; k <= kk; k++) { - if (beter[k] < best_d[k]) { - best_d[k] = beter[k]; - best_h[k] = h; + if (best_d[k] < dzsky) { + dzsky = best_d[k]; + kbest = k; } } - } - // Pick one best medoid at the end (additional swaps come later). - for(k = 1; k <= kk; k++) { - if (best_d[k] < dzsky) { - dzsky = best_d[k]; - kbest = k; + hbest = best_h[kbest]; + nbest = medoids[kbest]; + } else { // Schubert and Rousseeuw, 2021, FasterPAM + // Check possible new medoids h + // Beginning at the last swap performed + int h2 = 1; + for (h = lastswap + 1; h2 <= n; ++h, ++h2) { + if (h == n+1) h = 1; // wrap around + if (nrepr[h]) continue; + R_CheckUserInterrupt(); + for(k = 1; k <= kk; k++) + beter[k] = 0; + double acc = -dysma[h]; + beter[clustmembership[h]] += dysma[h] - dysmb[h]; + // Compute gain of substituting h for each other medoid: + int ijbase = (h-2)*(h-1)/2; + for (j = 1; j < h; ++j) { + double dist_h = dys[ijbase+j]; // New medoid + int memb = clustmembership[j]; // Medoid nr of nearest + double distcur = dysma[j]; // Nearest + double distsec = dysmb[j]; // Second nearest + // New medoid is new best: + if (dist_h < distcur) { + acc += dist_h - distcur; + beter[memb] += distcur - distsec; + } else if (dist_h < distsec) { + beter[memb] += dist_h - distsec; + } + } + ijbase += h;// = (h-2)*(h-1)/2 + h + for (j = h+1; j <= n; ++j) { + ijbase += j-2; + double dist_h = dys[ijbase]; // New medoid + int memb = clustmembership[j]; // Medoid nr of nearest + double distcur = dysma[j]; // Nearest + double distsec = dysmb[j]; // Second nearest + // New medoid is new best: + if (dist_h < distcur) { + acc += dist_h - distcur; + beter[memb] += distcur - distsec; + } else if (dist_h < distsec) { + beter[memb] += dist_h - distsec; + } + } + for(k = 1; k <= kk; k++) { + double loss = beter[k] + acc + remove_loss[k]; + if (loss < dzsky) { + dzsky = loss; + hbest = h; + nbest = medoids[k]; + kbest = k; + } + } + // Execute the first swap found. + if (dzsky < 0) { + break; + } } } - hbest = best_h[kbest]; - nbest = medoids[kbest]; } else { Rprintf("Invalid pamonce value: %d\n", pamonce); return; @@ -735,8 +795,72 @@ nrepr[nbest] = 0; if(pamonce) medoids[kbest]=hbest; + if(pamonce == 6) + lastswap = hbest; sky += dzsky; + if (pamonce == 3 || pamonce == 6) { // FasterPAM improvement, Schubert and Rousseeuw 2021 + // Update dysma, dysmb rather than recomputing it + double newloss = 0; + for (j = 1; j <= n; ++j) { + /* dysma[j] := D_j d(j, ) [KR p.102, 104] + * dysmb[j] := E_j d(j, <2-nd cl.medi>) [p.103] */ + double dnew = dys[ind_2(hbest, j)]; + if (clustmembership[j] == kbest) { + if (dnew < dysmb[j]) { + // Clustmembership already kbest + dysma[j] = dnew; + } else { + double dysmaj = s, dysmbj = s; + for(k = 1; k <= kk; k++) { + double dysij = dys[ind_2(medoids[k], j)]; + if (dysmaj > dysij) { + clustmembershipb[j] = clustmembership[j]; + dysmbj = dysmaj; + //store cluster membership + clustmembership[j] = k; // Use medoid k, not i + dysmaj = dysij; + } else if (dysmbj > dysij) { + clustmembershipb[j] = k; // Use medoid k, not i + dysmbj = dysij; + } + } + dysma[j] = dysmaj; + dysmb[j] = dysmbj; + } + } else { + if (dnew < dysma[j]) { + clustmembershipb[j] = clustmembership[j]; // not kbest + dysmb[j] = dysma[j]; + clustmembership[j] = kbest; // Use medoid k, not i + dysma[j] = dnew; + } else if (clustmembershipb[j] == kbest) { + double dysmaj = s, dysmbj = s; + for(k = 1; k <= kk; k++) { + double dysij = dys[ind_2(medoids[k], j)]; + if (dysmaj > dysij) { + clustmembershipb[j] = clustmembership[j]; + dysmbj = dysmaj; + //store cluster membership + clustmembership[j] = k; // Use medoid k, not i + dysmaj = dysij; + } else if (dysmbj > dysij) { + clustmembershipb[j] = k; // Use medoid k, not i + dysmbj = dysij; + } + } + dysma[j] = dysmaj; + dysmb[j] = dysmbj; + } else if (dnew < dysmb[j]) { + clustmembershipb[j] = kbest; // Use medoid k, not i + dysmb[j] = dnew; + } + } + newloss += dysma[j]; + } + sky = newloss; // more accurate than accumulating changes + goto L60b; + } // FastPAM2, Schubert and Rousseeuw 2019 if (pamonce == 4 || pamonce == 5) do { diff -Nru cluster-2.1.0/src/sildist.c cluster-2.1.2/src/sildist.c --- cluster-2.1.0/src/sildist.c 2006-02-27 08:54:19.000000000 +0000 +++ cluster-2.1.2/src/sildist.c 2020-05-07 13:44:01.000000000 +0000 @@ -30,7 +30,9 @@ for(j = i+1; j < *n; j++, l++) { int cj = clustering[j]-1; - + /* TODO: d_ij += dist(x_i, x_j) -- computed "on the fly", + * ---- but not stored in a length n(n-1)/2 = O(n^2) + * distance object */ diC[(*k)*i + cj] += d[l]; diC[(*k)*j + ci] += d[l]; } diff -Nru cluster-2.1.0/tests/agnes-ex.R cluster-2.1.2/tests/agnes-ex.R --- cluster-2.1.0/tests/agnes-ex.R 2018-03-29 14:35:52.000000000 +0000 +++ cluster-2.1.2/tests/agnes-ex.R 2021-04-16 13:57:13.000000000 +0000 @@ -2,7 +2,9 @@ options(digits = 6) data(votes.repub) +## IGNORE_RDIFF_BEGIN source(system.file("test-tools.R", package = "cluster"), keep.source = FALSE) +## IGNORE_RDIFF_END ## -> showProc.time() ... & doExtras agn1 <- agnes(votes.repub, metric = "manhattan", stand = TRUE) diff -Nru cluster-2.1.0/tests/agnes-ex.Rout.save cluster-2.1.2/tests/agnes-ex.Rout.save --- cluster-2.1.0/tests/agnes-ex.Rout.save 2018-03-29 14:35:52.000000000 +0000 +++ cluster-2.1.2/tests/agnes-ex.Rout.save 2021-04-16 13:57:13.000000000 +0000 @@ -1,6 +1,6 @@ -R version 3.5.0 alpha (2018-03-28 r74481) -Copyright (C) 2018 The R Foundation for Statistical Computing +R version 4.0.3 Patched (2021-01-18 r79850) -- "Bunny-Wunnies Freak Out" +Copyright (C) 2021 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. @@ -19,8 +19,11 @@ > options(digits = 6) > data(votes.repub) > +> ## IGNORE_RDIFF_BEGIN > source(system.file("test-tools.R", package = "cluster"), keep.source = FALSE) Loading required package: tools +doExtras <- cluster:::doExtras() : TRUE +> ## IGNORE_RDIFF_END > ## -> showProc.time() ... & doExtras > > agn1 <- agnes(votes.repub, metric = "manhattan", stand = TRUE) @@ -483,7 +486,7 @@ - attr(*, "class")= chr [1:2] "agnes" "twins" > > showProc.time() -Time elapsed: 0.456 0.083 0.595 +Time (user system elapsed): 0.602 0.061 0.667 > > summary(ar2 <- agnes(ruspini, metric="manhattan", method = "weighted")) Object of class 'agnes' from call: @@ -608,7 +611,7 @@ > stopifnot(all.equal(ar2[1:4], ar3[1:4], tol=1e-12)) > > showProc.time() -Time elapsed: 0.002 0.003 0.005 +Time (user system elapsed): 0.003 0.001 0.004 > > ## Small example, testing "flexible" vs "single" > i8 <- -c(1:2, 9:10) @@ -754,7 +757,7 @@ C agnes(n=75, method = 6, ..): 74 merging steps > > showProc.time() -Time elapsed: 0.029 0.006 0.036 +Time (user system elapsed): 0.04 0.001 0.041 > > ## an invalid "flexible" case - now must give error early: > x <- rbind(c( -6, -9), c( 0, 13), @@ -779,4 +782,4 @@ > > proc.time() user system elapsed - 0.636 0.136 0.887 + 0.767 0.094 0.859 diff -Nru cluster-2.1.0/tests/pam.R cluster-2.1.2/tests/pam.R --- cluster-2.1.0/tests/pam.R 2019-04-01 15:51:00.000000000 +0000 +++ cluster-2.1.2/tests/pam.R 2021-01-30 21:27:20.000000000 +0000 @@ -103,10 +103,10 @@ writeLines(paste("Time", capture.output(print(st)))) invisible(st) } -show5Ratios <- function(...) { - stopifnot(length(rgs <- list(...)) == 5, +show6Ratios <- function(...) { + stopifnot(length(rgs <- list(...)) == 6, nchar(ns <- names(rgs)) > 0) - r <- round(cbind(..1, ..2, ..3, ..4, ..5)[c(1,5),], 5) + r <- round(cbind(..1, ..2, ..3, ..4, ..5, ..6)[c(1,5),], 5) dimnames(r) <- list(paste("Time ", rownames(r)), ns) r } @@ -131,13 +131,15 @@ st1 <- showSys.time(pamxonce <- pam(x, 4, pamonce=TRUE, trace.lev=2))# 6.122 0.024 6.181 ## bswapPamOnceDistIndice st2 <- showSys.time(pamxonce2 <- pam(x, 4, pamonce = 2, trace.lev=2))# 4.101 0.024 4.151 -## bswapPamSchubertPlus +## bswapPamSchubert FastPAM1 st3 <- showSys.time(pamxonce3 <- pam(x, 4, pamonce = 3, trace.lev=2))# -## bswapPamSchubertPlusPlus +## bswapPamSchubert FastPAM2 st4 <- showSys.time(pamxonce4 <- pam(x, 4, pamonce = 4, trace.lev=2))# -## bswapPamSchubertPlusPlus with linearized memory access +## bswapPamSchubert FastPAM2 with linearized memory access st5 <- showSys.time(pamxonce5 <- pam(x, 4, pamonce = 5, trace.lev=2))# -show5Ratios('5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) +## bswapPamSchubert FasterPAM +st6 <- showSys.time(pamxonce6 <- pam(x, 4, pamonce = 6, trace.lev=2))# +show6Ratios('6:orig' = st6/st0, '5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) ## only call element is not equal (icall <- which(names(pamx) == "call")) @@ -146,7 +148,8 @@ all.equal(pamxonce[-icall], pamxonce2[-icall]), all.equal(pamxonce[-icall], pamxonce3[-icall]), all.equal(pamxonce[-icall], pamxonce4[-icall]), - all.equal(pamxonce[-icall], pamxonce5[-icall])) + all.equal(pamxonce[-icall], pamxonce5[-icall]), + all.equal(pamxonce[-icall], pamxonce6[-icall])) ## Same using specified medoids (med0 <- 1 + round(n* c(0,1, 2.5, 4)))# lynne (~ 2010, AMD Phenom II X4 925) @@ -156,14 +159,16 @@ st3 <- showSys.time(pamxonce3st <- pam(x, 4, medoids = med0, pamonce=3, trace.lev=2))# st4 <- showSys.time(pamxonce4st <- pam(x, 4, medoids = med0, pamonce=4, trace.lev=2))# st5 <- showSys.time(pamxonce5st <- pam(x, 4, medoids = med0, pamonce=5, trace.lev=2))# -show5Ratios('5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) +st6 <- showSys.time(pamxonce6st <- pam(x, 4, medoids = med0, pamonce=6, trace.lev=2))# +show6Ratios('6:orig' = st6/st0, '5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) ## only call element is not equal stopifnot(all.equal(pamxst [-icall], pamxoncest [-icall]), all.equal(pamxoncest[-icall], pamxonce2st[-icall]), all.equal(pamxoncest[-icall], pamxonce3st[-icall]), all.equal(pamxoncest[-icall], pamxonce4st[-icall]), - all.equal(pamxoncest[-icall], pamxonce5st[-icall])) + all.equal(pamxoncest[-icall], pamxonce5st[-icall]), + all.equal(pamxoncest[-icall], pamxonce6st[-icall])) ## Different starting values med0 <- 1:4 # lynne (~ 2010, AMD Phenom II X4 925) @@ -173,14 +178,16 @@ st3 <- showSys.time(pamxonce3st <- pam(x, 4, medoids = med0, pamonce=3, trace.lev=2))# st4 <- showSys.time(pamxonce4st <- pam(x, 4, medoids = med0, pamonce=4, trace.lev=2))# st5 <- showSys.time(pamxonce5st <- pam(x, 4, medoids = med0, pamonce=5, trace.lev=2))# -show5Ratios('5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) +st6 <- showSys.time(pamxonce6st <- pam(x, 4, medoids = med0, pamonce=6, trace.lev=2))# +show6Ratios('6:orig' = st6/st0, '5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) ## only call element is not equal stopifnot(all.equal(pamxst [-icall], pamxoncest [-icall]), all.equal(pamxoncest[-icall], pamxonce2st[-icall]), all.equal(pamxoncest[-icall], pamxonce3st[-icall]), all.equal(pamxoncest[-icall], pamxonce4st[-icall]), - all.equal(pamxoncest[-icall], pamxonce5st[-icall])) + all.equal(pamxoncest[-icall], pamxonce5st[-icall]), + all.equal(pamxoncest[-icall], pamxonce6st[-icall])) ## Medoid bug --- MM: Fixed, well "0L+ hack", in my pam.q, on 2012-01-31 @@ -203,11 +210,16 @@ med0 <- (1:6) st5 <- showSys.time(pamxst.5 <- pam(x, 6, medoids = med0 , pamonce=5, trace.lev=2)) stopifnot(identical(med0, 1:6)) +med0 <- (1:6) +st6 <- showSys.time(pamxst.6 <- pam(x, 6, medoids = med0 , pamonce=6, trace.lev=2)) +stopifnot(identical(med0, 1:6)) stopifnot(all.equal(pamxst[-icall], pamxst.1 [-icall]), all.equal(pamxst[-icall], pamxst.2 [-icall]), all.equal(pamxst[-icall], pamxst.3 [-icall]), all.equal(pamxst[-icall], pamxst.4 [-icall]), all.equal(pamxst[-icall], pamxst.5 [-icall])) +# FasterPAM finds a better solution here, by chance +stopifnot(pamxst$objective >= pamxst.6$objective) ## Last Line: diff -Nru cluster-2.1.0/tests/pam.Rout.save cluster-2.1.2/tests/pam.Rout.save --- cluster-2.1.0/tests/pam.Rout.save 2019-04-01 15:51:00.000000000 +0000 +++ cluster-2.1.2/tests/pam.Rout.save 2021-01-30 21:27:20.000000000 +0000 @@ -1,6 +1,6 @@ -R version 3.5.0 alpha (2018-03-28 r74481) -Copyright (C) 2018 The R Foundation for Statistical Computing +R version 4.0.3 Patched (2021-01-18 r79850) -- "Bunny-Wunnies Freak Out" +Copyright (C) 2021 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. @@ -1047,13 +1047,12 @@ [6] "clusinfo" "silinfo" "diss" "call" "data" > > cat('Time elapsed: ', proc.time() - .proctime00,'\n') -Time elapsed: 0.574 0.031 0.621 0 0 +Time elapsed: 0.392 0.016 0.41 0 0 > > ## re-starting with medoids from pv6 shouldn't change: > pv6. <- pam(votes.repub, 6, medoids = pv6$id.med, trace = 3) C pam(): computing 1226 dissimilarities from 50 x 31 matrix: [Ok] -pam()'s bswap(*, s=281.951, pamonce=0): medoids given - after build: medoids are 2 10 15 31 40 46 +pam()'s bswap(*, s=281.951, pamonce=0): medoids given; after build: medoids are 2 10 15 31 40 46 and min.dist dysma[1:n] are 48.2 0 37.7 56 35.8 28.5 28.6 31.7 54.1 0 51.7 33.2 27.3 30.5 0 35.1 25.4 58.3 36.9 26.7 @@ -1100,8 +1099,7 @@ > > ## This gave only 3 different medoids -> and seg.fault: > (r5 <- pam(dd, 5, medoids = c(1,3,20,2,5), trace = 2)) # now "fine" -pam()'s bswap(*, s=8.51931, pamonce=0): medoids given - after build: medoids are 1 2 3 5 20 +pam()'s bswap(*, s=8.51931, pamonce=0): medoids given; after build: medoids are 1 2 3 5 20 swp new 14 <-> 2 old; decreasing diss. 29.8745 by -5.50096 swp new 15 <-> 1 old; decreasing diss. 24.3735 by -2.20162 swp new 6 <-> 20 old; decreasing diss. 22.1719 by -2.12745 @@ -1137,10 +1135,10 @@ + writeLines(paste("Time", capture.output(print(st)))) + invisible(st) + } -> show5Ratios <- function(...) { -+ stopifnot(length(rgs <- list(...)) == 5, +> show6Ratios <- function(...) { ++ stopifnot(length(rgs <- list(...)) == 6, + nchar(ns <- names(rgs)) > 0) -+ r <- round(cbind(..1, ..2, ..3, ..4, ..5)[c(1,5),], 5) ++ r <- round(cbind(..1, ..2, ..3, ..4, ..5, ..6)[c(1,5),], 5) + dimnames(r) <- list(paste("Time ", rownames(r)), ns) + r + } @@ -1171,7 +1169,7 @@ swp new 1793 <-> 1268 old; decreasing diss. 1862.37 by -129.13 end{bswap()}, end{cstat()} Time user system elapsed -Time 1.108 0.007 1.117 +Time 1.163 0.005 1.176 > ## bswapPamOnce algorithm > st1 <- showSys.time(pamxonce <- pam(x, 4, pamonce=TRUE, trace.lev=2))# 6.122 0.024 6.181 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] @@ -1184,7 +1182,7 @@ swp new 1793 <-> 1268 old; decreasing diss. 1862.37 by -129.13 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.867 0.010 0.878 +Time 0.882 0.015 0.908 > ## bswapPamOnceDistIndice > st2 <- showSys.time(pamxonce2 <- pam(x, 4, pamonce = 2, trace.lev=2))# 4.101 0.024 4.151 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] @@ -1197,8 +1195,8 @@ swp new 1793 <-> 1268 old; decreasing diss. 1862.37 by -129.13 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.721 0.000 0.722 -> ## bswapPamSchubertPlus +Time 0.741 0.000 0.746 +> ## bswapPamSchubert FastPAM1 > st3 <- showSys.time(pamxonce3 <- pam(x, 4, pamonce = 3, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] pam()'s bswap(*, s=15.7788, pamonce=3): build 4 medoids: @@ -1210,8 +1208,8 @@ swp new 1793 <-> 1268 old; decreasing diss. 1862.37 by -129.13 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.321 0.000 0.321 -> ## bswapPamSchubertPlusPlus +Time 0.560 0.001 0.566 +> ## bswapPamSchubert FastPAM2 > st4 <- showSys.time(pamxonce4 <- pam(x, 4, pamonce = 4, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] pam()'s bswap(*, s=15.7788, pamonce=4): build 4 medoids: @@ -1223,8 +1221,8 @@ swp new 1793 <-> 1268 old; decreasing diss. 1862.37 by -129.13 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.337 0.000 0.337 -> ## bswapPamSchubertPlusPlus with linearized memory access +Time 0.637 0.000 0.643 +> ## bswapPamSchubert FastPAM2 with linearized memory access > st5 <- showSys.time(pamxonce5 <- pam(x, 4, pamonce = 5, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] pam()'s bswap(*, s=15.7788, pamonce=5): build 4 medoids: @@ -1236,11 +1234,31 @@ swp new 1793 <-> 1268 old; decreasing diss. 1862.37 by -129.13 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.316 0.001 0.318 -> show5Ratios('5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) - 5:orig 4:orig 3:orig 2:orig 1:orig -Time user.self 0.48541 0.51767 0.49155 0.65591 0.81106 -Time sys.child NaN NaN NaN NaN NaN +Time 0.494 0.000 0.498 +> ## bswapPamSchubert FasterPAM +> st6 <- showSys.time(pamxonce6 <- pam(x, 4, pamonce = 6, trace.lev=2))# +C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] +pam()'s bswap(*, s=15.7788, pamonce=6): build 4 medoids: + new repr. 1268 + new repr. 414 + new repr. 2153 + new repr. 915 + after build: medoids are 414 915 1268 2153 + swp new 1251 <-> 1268 old; decreasing diss. 1862.37 by -27.6945 + swp new 1255 <-> 1251 old; decreasing diss. 1834.68 by -81.213 + swp new 1259 <-> 1255 old; decreasing diss. 1753.46 by -4.71205 + swp new 1265 <-> 1259 old; decreasing diss. 1748.75 by -1.5194 + swp new 1280 <-> 1265 old; decreasing diss. 1747.23 by -1.34867 + swp new 1300 <-> 1280 old; decreasing diss. 1745.88 by -9.69283 + swp new 1421 <-> 1300 old; decreasing diss. 1736.19 by -2.94296 + swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 +end{bswap()}, end{cstat()} +Time user system elapsed +Time 0.483 0.001 0.488 +> show6Ratios('6:orig' = st6/st0, '5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) + 6:orig 5:orig 4:orig 3:orig 2:orig 1:orig +Time user.self 0.41531 0.42476 0.54772 0.48151 0.63715 0.75838 +Time sys.child NaN NaN NaN NaN NaN NaN > > ## only call element is not equal > (icall <- which(names(pamx) == "call")) @@ -1251,59 +1269,55 @@ + all.equal(pamxonce[-icall], pamxonce2[-icall]), + all.equal(pamxonce[-icall], pamxonce3[-icall]), + all.equal(pamxonce[-icall], pamxonce4[-icall]), -+ all.equal(pamxonce[-icall], pamxonce5[-icall])) ++ all.equal(pamxonce[-icall], pamxonce5[-icall]), ++ all.equal(pamxonce[-icall], pamxonce6[-icall])) > > ## Same using specified medoids > (med0 <- 1 + round(n* c(0,1, 2.5, 4)))# lynne (~ 2010, AMD Phenom II X4 925) [1] 1 501 1251 2001 > st0 <- showSys.time(pamxst <- pam(x, 4, medoids = med0, trace.lev=2))# 13.071 0.024 13.177 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=0): medoids given - after build: medoids are 1 501 1251 2001 +pam()'s bswap(*, s=15.7788, pamonce=0): medoids given; after build: medoids are 1 501 1251 2001 swp new 915 <-> 501 old; decreasing diss. 2126.83 by -197.507 swp new 1793 <-> 1251 old; decreasing diss. 1929.32 by -101.336 swp new 414 <-> 1 old; decreasing diss. 1827.98 by -86.3404 swp new 2153 <-> 2001 old; decreasing diss. 1741.64 by -8.40201 end{bswap()}, end{cstat()} Time user system elapsed -Time 1.984 0.000 1.989 +Time 1.720 0.000 1.732 > st1 <- showSys.time(pamxoncest <- pam(x, 4, medoids = med0, pamonce=TRUE, trace.lev=2))# 8.503 0.024 8.578 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=1): medoids given - after build: medoids are 1 501 1251 2001 +pam()'s bswap(*, s=15.7788, pamonce=1): medoids given; after build: medoids are 1 501 1251 2001 swp new 915 <-> 501 old; decreasing diss. 2126.83 by -197.507 swp new 1793 <-> 1251 old; decreasing diss. 1929.32 by -101.336 swp new 414 <-> 1 old; decreasing diss. 1827.98 by -86.3404 swp new 2153 <-> 2001 old; decreasing diss. 1741.64 by -8.40201 end{bswap()}, end{cstat()} Time user system elapsed -Time 1.315 0.000 1.318 +Time 1.319 0.000 1.329 > st2 <- showSys.time(pamxonce2st <- pam(x, 4, medoids = med0, pamonce=2, trace.lev=2))# 5.587 0.025 5.647 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=2): medoids given - after build: medoids are 1 501 1251 2001 +pam()'s bswap(*, s=15.7788, pamonce=2): medoids given; after build: medoids are 1 501 1251 2001 swp new 915 <-> 501 old; decreasing diss. 2126.83 by -197.507 swp new 1793 <-> 1251 old; decreasing diss. 1929.32 by -101.336 swp new 414 <-> 1 old; decreasing diss. 1827.98 by -86.3404 swp new 2153 <-> 2001 old; decreasing diss. 1741.64 by -8.40201 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.983 0.000 0.986 +Time 0.915 0.001 0.922 > st3 <- showSys.time(pamxonce3st <- pam(x, 4, medoids = med0, pamonce=3, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=3): medoids given - after build: medoids are 1 501 1251 2001 +pam()'s bswap(*, s=15.7788, pamonce=3): medoids given; after build: medoids are 1 501 1251 2001 swp new 915 <-> 501 old; decreasing diss. 2126.83 by -197.507 swp new 1793 <-> 1251 old; decreasing diss. 1929.32 by -101.336 swp new 414 <-> 1 old; decreasing diss. 1827.98 by -86.3404 swp new 2153 <-> 2001 old; decreasing diss. 1741.64 by -8.40201 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.334 0.000 0.334 +Time 0.442 0.001 0.445 > st4 <- showSys.time(pamxonce4st <- pam(x, 4, medoids = med0, pamonce=4, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=4): medoids given - after build: medoids are 1 501 1251 2001 +pam()'s bswap(*, s=15.7788, pamonce=4): medoids given; after build: medoids are 1 501 1251 2001 swp new 915 <-> 501 old; decreasing diss. 2126.83 by -197.507 fswp new 1421 <-> 1251 old; decreasing diss. 1929.32 by -101.326 fswp new 414 <-> 1 old; decreasing diss. 1827.99 by -86.3404 @@ -1311,11 +1325,10 @@ swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.246 0.000 0.246 +Time 0.329 0.000 0.331 > st5 <- showSys.time(pamxonce5st <- pam(x, 4, medoids = med0, pamonce=5, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=5): medoids given - after build: medoids are 1 501 1251 2001 +pam()'s bswap(*, s=15.7788, pamonce=5): medoids given; after build: medoids are 1 501 1251 2001 swp new 915 <-> 501 old; decreasing diss. 2126.83 by -197.507 fswp new 1421 <-> 1251 old; decreasing diss. 1929.32 by -101.326 fswp new 414 <-> 1 old; decreasing diss. 1827.99 by -86.3404 @@ -1323,25 +1336,58 @@ swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.219 0.000 0.219 -> show5Ratios('5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) - 5:orig 4:orig 3:orig 2:orig 1:orig -Time user.self 0.19536 0.21945 0.28278 0.49955 0.72168 -Time sys.child NaN NaN NaN NaN NaN +Time 0.289 0.000 0.290 +> st6 <- showSys.time(pamxonce6st <- pam(x, 4, medoids = med0, pamonce=6, trace.lev=2))# +C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] +pam()'s bswap(*, s=15.7788, pamonce=6): medoids given; after build: medoids are 1 501 1251 2001 + swp new 8 <-> 1 old; decreasing diss. 2126.83 by -33.2528 + swp new 12 <-> 8 old; decreasing diss. 2093.57 by -32.0203 + swp new 15 <-> 12 old; decreasing diss. 2061.55 by -2.88573 + swp new 16 <-> 15 old; decreasing diss. 2058.67 by -3.50571 + swp new 33 <-> 16 old; decreasing diss. 2055.16 by -0.382726 + swp new 56 <-> 33 old; decreasing diss. 2054.78 by -0.660581 + swp new 70 <-> 56 old; decreasing diss. 2054.12 by -9.63432 + swp new 86 <-> 70 old; decreasing diss. 2044.48 by -2.56554 + swp new 123 <-> 86 old; decreasing diss. 2041.92 by -1.30247 + swp new 414 <-> 123 old; decreasing diss. 2040.62 by -0.130313 + swp new 502 <-> 501 old; decreasing diss. 2040.49 by -36.5109 + swp new 507 <-> 502 old; decreasing diss. 2003.97 by -131.351 + swp new 509 <-> 507 old; decreasing diss. 1872.62 by -14.3528 + swp new 530 <-> 509 old; decreasing diss. 1858.27 by -7.60641 + swp new 542 <-> 530 old; decreasing diss. 1850.66 by -2.78128 + swp new 574 <-> 542 old; decreasing diss. 1847.88 by -4.18202 + swp new 913 <-> 574 old; decreasing diss. 1843.7 by -0.343729 + swp new 915 <-> 913 old; decreasing diss. 1843.36 by -0.378301 + swp new 1255 <-> 1251 old; decreasing diss. 1842.98 by -81.0222 + swp new 1259 <-> 1255 old; decreasing diss. 1761.96 by -4.71205 + swp new 1265 <-> 1259 old; decreasing diss. 1757.24 by -1.6954 + swp new 1280 <-> 1265 old; decreasing diss. 1755.55 by -1.25118 + swp new 1300 <-> 1280 old; decreasing diss. 1754.3 by -9.70566 + swp new 1421 <-> 1300 old; decreasing diss. 1744.59 by -2.93951 + swp new 1793 <-> 1421 old; decreasing diss. 1741.65 by -0.00984953 + swp new 2089 <-> 2001 old; decreasing diss. 1741.64 by -3.18091 + swp new 2153 <-> 2089 old; decreasing diss. 1738.46 by -5.2211 +end{bswap()}, end{cstat()} +Time user system elapsed +Time 0.227 0.000 0.228 +> show6Ratios('6:orig' = st6/st0, '5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) + 6:orig 5:orig 4:orig 3:orig 2:orig 1:orig +Time user.self 0.13198 0.16802 0.19128 0.25698 0.53198 0.76686 +Time sys.child NaN NaN NaN NaN NaN NaN > > ## only call element is not equal > stopifnot(all.equal(pamxst [-icall], pamxoncest [-icall]), + all.equal(pamxoncest[-icall], pamxonce2st[-icall]), + all.equal(pamxoncest[-icall], pamxonce3st[-icall]), + all.equal(pamxoncest[-icall], pamxonce4st[-icall]), -+ all.equal(pamxoncest[-icall], pamxonce5st[-icall])) ++ all.equal(pamxoncest[-icall], pamxonce5st[-icall]), ++ all.equal(pamxoncest[-icall], pamxonce6st[-icall])) > > ## Different starting values > med0 <- 1:4 # lynne (~ 2010, AMD Phenom II X4 925) > st0 <- showSys.time(pamxst <- pam(x, 4, medoids = med0, trace.lev=2))# 13.416 0.023 13.529 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=0): medoids given - after build: medoids are 1 2 3 4 +pam()'s bswap(*, s=15.7788, pamonce=0): medoids given; after build: medoids are 1 2 3 4 swp new 1421 <-> 4 old; decreasing diss. 21009.4 by -15939.9 swp new 2153 <-> 3 old; decreasing diss. 5069.52 by -1657.88 swp new 915 <-> 2 old; decreasing diss. 3411.65 by -1592.06 @@ -1349,11 +1395,10 @@ swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 2.465 0.000 2.469 +Time 1.727 0.000 1.732 > st1 <- showSys.time(pamxoncest <- pam(x, 4, medoids = med0, pamonce=TRUE, trace.lev=2))# 8.384 0.024 8.459 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=1): medoids given - after build: medoids are 1 2 3 4 +pam()'s bswap(*, s=15.7788, pamonce=1): medoids given; after build: medoids are 1 2 3 4 swp new 1421 <-> 4 old; decreasing diss. 21009.4 by -15939.9 swp new 2153 <-> 3 old; decreasing diss. 5069.52 by -1657.88 swp new 915 <-> 2 old; decreasing diss. 3411.65 by -1592.06 @@ -1361,11 +1406,10 @@ swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 1.547 0.000 1.551 +Time 1.362 0.000 1.366 > st2 <- showSys.time(pamxonce2st <- pam(x, 4, medoids = med0, pamonce=2, trace.lev=2))# 5.455 0.030 5.520 C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=2): medoids given - after build: medoids are 1 2 3 4 +pam()'s bswap(*, s=15.7788, pamonce=2): medoids given; after build: medoids are 1 2 3 4 swp new 1421 <-> 4 old; decreasing diss. 21009.4 by -15939.9 swp new 2153 <-> 3 old; decreasing diss. 5069.52 by -1657.88 swp new 915 <-> 2 old; decreasing diss. 3411.65 by -1592.06 @@ -1373,11 +1417,10 @@ swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 1.128 0.001 1.132 +Time 0.926 0.000 0.929 > st3 <- showSys.time(pamxonce3st <- pam(x, 4, medoids = med0, pamonce=3, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=3): medoids given - after build: medoids are 1 2 3 4 +pam()'s bswap(*, s=15.7788, pamonce=3): medoids given; after build: medoids are 1 2 3 4 swp new 1421 <-> 4 old; decreasing diss. 21009.4 by -15939.9 swp new 2153 <-> 3 old; decreasing diss. 5069.52 by -1657.88 swp new 915 <-> 2 old; decreasing diss. 3411.65 by -1592.06 @@ -1385,11 +1428,10 @@ swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.367 0.000 0.367 +Time 0.504 0.000 0.505 > st4 <- showSys.time(pamxonce4st <- pam(x, 4, medoids = med0, pamonce=4, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=4): medoids given - after build: medoids are 1 2 3 4 +pam()'s bswap(*, s=15.7788, pamonce=4): medoids given; after build: medoids are 1 2 3 4 swp new 1421 <-> 4 old; decreasing diss. 21009.4 by -15939.9 swp new 2153 <-> 3 old; decreasing diss. 5069.52 by -1657.88 swp new 915 <-> 2 old; decreasing diss. 3411.65 by -1592.06 @@ -1397,11 +1439,10 @@ fswp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.343 0.000 0.343 +Time 0.449 0.000 0.451 > st5 <- showSys.time(pamxonce5st <- pam(x, 4, medoids = med0, pamonce=5, trace.lev=2))# C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=5): medoids given - after build: medoids are 1 2 3 4 +pam()'s bswap(*, s=15.7788, pamonce=5): medoids given; after build: medoids are 1 2 3 4 swp new 1421 <-> 4 old; decreasing diss. 21009.4 by -15939.9 swp new 2153 <-> 3 old; decreasing diss. 5069.52 by -1657.88 swp new 915 <-> 2 old; decreasing diss. 3411.65 by -1592.06 @@ -1409,18 +1450,122 @@ fswp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.273 0.000 0.273 -> show5Ratios('5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) - 5:orig 4:orig 3:orig 2:orig 1:orig -Time user.self 0.18972 0.23836 0.25573 0.44128 0.63377 -Time sys.child NaN NaN NaN NaN NaN +Time 0.338 0.000 0.340 +> st6 <- showSys.time(pamxonce6st <- pam(x, 4, medoids = med0, pamonce=6, trace.lev=2))# +C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] +pam()'s bswap(*, s=15.7788, pamonce=6): medoids given; after build: medoids are 1 2 3 4 + swp new 7 <-> 3 old; decreasing diss. 21009.4 by -4.9986 + swp new 8 <-> 2 old; decreasing diss. 21004.4 by -16.4723 + swp new 11 <-> 7 old; decreasing diss. 20987.9 by -12.0798 + swp new 12 <-> 8 old; decreasing diss. 20975.9 by -3.31491 + swp new 13 <-> 1 old; decreasing diss. 20972.5 by -4.88251 + swp new 14 <-> 13 old; decreasing diss. 20967.7 by -1.90148 + swp new 15 <-> 14 old; decreasing diss. 20965.8 by -9.59363 + swp new 22 <-> 11 old; decreasing diss. 20956.2 by -10.0478 + swp new 24 <-> 15 old; decreasing diss. 20946.1 by -7.99457 + swp new 26 <-> 12 old; decreasing diss. 20938.1 by -3.0991 + swp new 44 <-> 22 old; decreasing diss. 20935 by -880.436 + swp new 45 <-> 4 old; decreasing diss. 20054.6 by -9.44638 + swp new 55 <-> 26 old; decreasing diss. 20045.1 by -1.77816 + swp new 57 <-> 24 old; decreasing diss. 20043.4 by -1.76138 + swp new 58 <-> 44 old; decreasing diss. 20041.6 by -178.122 + swp new 63 <-> 45 old; decreasing diss. 19863.5 by -0.34634 + swp new 71 <-> 57 old; decreasing diss. 19863.1 by -1.49747 + swp new 75 <-> 63 old; decreasing diss. 19861.6 by -1.31804 + swp new 76 <-> 71 old; decreasing diss. 19860.3 by -1.42789 + swp new 80 <-> 55 old; decreasing diss. 19858.9 by -5.29615 + swp new 81 <-> 75 old; decreasing diss. 19853.6 by -0.164308 + swp new 83 <-> 76 old; decreasing diss. 19853.4 by -0.0877432 + swp new 115 <-> 81 old; decreasing diss. 19853.3 by -0.303527 + swp new 171 <-> 58 old; decreasing diss. 19853 by -971.874 + swp new 185 <-> 115 old; decreasing diss. 18881.2 by -0.471238 + swp new 192 <-> 80 old; decreasing diss. 18880.7 by -0.294662 + swp new 257 <-> 185 old; decreasing diss. 18880.4 by -0.466733 + swp new 290 <-> 257 old; decreasing diss. 18879.9 by -0.105762 + swp new 309 <-> 83 old; decreasing diss. 18879.8 by -0.0395709 + swp new 419 <-> 192 old; decreasing diss. 18879.8 by -0.0439214 + swp new 425 <-> 309 old; decreasing diss. 18879.7 by -0.136105 + swp new 471 <-> 425 old; decreasing diss. 18879.6 by -0.244642 + swp new 501 <-> 171 old; decreasing diss. 18879.4 by -11830.7 + swp new 502 <-> 471 old; decreasing diss. 7048.64 by -273.113 + swp new 503 <-> 290 old; decreasing diss. 6775.52 by -813.133 + swp new 504 <-> 502 old; decreasing diss. 5962.39 by -20.8894 + swp new 507 <-> 504 old; decreasing diss. 5941.5 by -42.7153 + swp new 515 <-> 501 old; decreasing diss. 5898.79 by -0.453931 + swp new 523 <-> 515 old; decreasing diss. 5898.33 by -67.1248 + swp new 526 <-> 507 old; decreasing diss. 5831.21 by -0.673248 + swp new 527 <-> 526 old; decreasing diss. 5830.53 by -2.26904 + swp new 537 <-> 503 old; decreasing diss. 5828.26 by -3.1636 + swp new 542 <-> 527 old; decreasing diss. 5825.1 by -2.0623 + swp new 545 <-> 542 old; decreasing diss. 5823.04 by -17.9136 + swp new 547 <-> 523 old; decreasing diss. 5805.13 by -194.143 + swp new 573 <-> 547 old; decreasing diss. 5610.98 by -607.192 + swp new 576 <-> 545 old; decreasing diss. 5003.79 by -0.801911 + swp new 579 <-> 573 old; decreasing diss. 5002.99 by -347.734 + swp new 592 <-> 576 old; decreasing diss. 4655.26 by -0.997177 + swp new 604 <-> 592 old; decreasing diss. 4654.26 by -0.808458 + swp new 617 <-> 604 old; decreasing diss. 4653.45 by -1.02162 + swp new 813 <-> 537 old; decreasing diss. 4652.43 by -0.254896 + swp new 883 <-> 617 old; decreasing diss. 4652.17 by -1.83048 + swp new 955 <-> 813 old; decreasing diss. 4650.34 by -0.591944 + swp new 1015 <-> 883 old; decreasing diss. 4649.75 by -0.0303283 + swp new 1016 <-> 955 old; decreasing diss. 4649.72 by -0.343593 + swp new 1086 <-> 1016 old; decreasing diss. 4649.38 by -0.0942057 + swp new 1088 <-> 1015 old; decreasing diss. 4649.28 by -0.0747132 + swp new 1111 <-> 1086 old; decreasing diss. 4649.21 by -0.996659 + swp new 1131 <-> 1088 old; decreasing diss. 4648.21 by -0.773913 + swp new 1134 <-> 1111 old; decreasing diss. 4647.44 by -0.174449 + swp new 1151 <-> 1131 old; decreasing diss. 4647.26 by -0.319467 + swp new 1251 <-> 579 old; decreasing diss. 4646.94 by -1367.16 + swp new 1252 <-> 1251 old; decreasing diss. 3279.79 by -27.203 + swp new 1253 <-> 1151 old; decreasing diss. 3252.58 by -137.657 + swp new 1255 <-> 1252 old; decreasing diss. 3114.93 by -52.4651 + swp new 1257 <-> 1253 old; decreasing diss. 3062.46 by -42.3678 + swp new 1259 <-> 1255 old; decreasing diss. 3020.09 by -1.87135 + swp new 1266 <-> 1257 old; decreasing diss. 3018.22 by -90.6385 + swp new 1280 <-> 1259 old; decreasing diss. 2927.58 by -20.3614 + swp new 1283 <-> 1266 old; decreasing diss. 2907.22 by -272.98 + swp new 1288 <-> 1280 old; decreasing diss. 2634.24 by -1.69952 + swp new 1300 <-> 1288 old; decreasing diss. 2632.54 by -9.58469 + swp new 1325 <-> 1300 old; decreasing diss. 2622.96 by -7.37653 + swp new 1612 <-> 1283 old; decreasing diss. 2615.58 by -2.38886 + swp new 2001 <-> 1612 old; decreasing diss. 2613.19 by -788.545 + swp new 2089 <-> 2001 old; decreasing diss. 1824.65 by -3.28836 + swp new 2153 <-> 2089 old; decreasing diss. 1821.36 by -5.16445 + swp new 12 <-> 419 old; decreasing diss. 1816.19 by -28.3676 + swp new 15 <-> 12 old; decreasing diss. 1787.83 by -2.88573 + swp new 16 <-> 15 old; decreasing diss. 1784.94 by -3.50571 + swp new 33 <-> 16 old; decreasing diss. 1781.43 by -0.382726 + swp new 56 <-> 33 old; decreasing diss. 1781.05 by -0.660581 + swp new 70 <-> 56 old; decreasing diss. 1780.39 by -9.63432 + swp new 86 <-> 70 old; decreasing diss. 1770.76 by -2.56554 + swp new 123 <-> 86 old; decreasing diss. 1768.19 by -1.30247 + swp new 414 <-> 123 old; decreasing diss. 1766.89 by -0.130313 + swp new 507 <-> 1134 old; decreasing diss. 1766.76 by -1.67967 + swp new 509 <-> 507 old; decreasing diss. 1765.08 by -11.8255 + swp new 530 <-> 509 old; decreasing diss. 1753.25 by -9.54887 + swp new 542 <-> 530 old; decreasing diss. 1743.7 by -2.59694 + swp new 574 <-> 542 old; decreasing diss. 1741.11 by -3.50085 + swp new 913 <-> 574 old; decreasing diss. 1737.61 by -0.356354 + swp new 915 <-> 913 old; decreasing diss. 1737.25 by -0.471447 + swp new 1300 <-> 1325 old; decreasing diss. 1736.78 by -0.589135 + swp new 1421 <-> 1300 old; decreasing diss. 1736.19 by -2.94296 + swp new 1793 <-> 1421 old; decreasing diss. 1733.25 by -0.00639415 +end{bswap()}, end{cstat()} +Time user system elapsed +Time 0.258 0.000 0.259 +> show6Ratios('6:orig' = st6/st0, '5:orig' = st5/st0, '4:orig' = st4/st0, '3:orig' = st3/st0, '2:orig' = st2/st0, '1:orig' = st1/st0) + 6:orig 5:orig 4:orig 3:orig 2:orig 1:orig +Time user.self 0.14939 0.19572 0.25999 0.29184 0.53619 0.78865 +Time sys.child NaN NaN NaN NaN NaN NaN > > ## only call element is not equal > stopifnot(all.equal(pamxst [-icall], pamxoncest [-icall]), + all.equal(pamxoncest[-icall], pamxonce2st[-icall]), + all.equal(pamxoncest[-icall], pamxonce3st[-icall]), + all.equal(pamxoncest[-icall], pamxonce4st[-icall]), -+ all.equal(pamxoncest[-icall], pamxonce5st[-icall])) ++ all.equal(pamxoncest[-icall], pamxonce5st[-icall]), ++ all.equal(pamxoncest[-icall], pamxonce6st[-icall])) > > > ## Medoid bug --- MM: Fixed, well "0L+ hack", in my pam.q, on 2012-01-31 @@ -1428,8 +1573,7 @@ > med0 <- (1:6) > st0 <- showSys.time(pamxst <- pam(x, 6, medoids = med0 , trace.lev=2)) C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=0): medoids given - after build: medoids are 1 2 3 4 5 6 +pam()'s bswap(*, s=15.7788, pamonce=0): medoids given; after build: medoids are 1 2 3 4 5 6 swp new 1421 <-> 6 old; decreasing diss. 20991.1 by -15949.5 swp new 2153 <-> 4 old; decreasing diss. 5041.66 by -1676.25 swp new 915 <-> 3 old; decreasing diss. 3365.41 by -1671.37 @@ -1443,13 +1587,12 @@ swp new 2082 <-> 2696 old; decreasing diss. 1570.26 by -0.187256 end{bswap()}, end{cstat()} Time user system elapsed -Time 6.971 0.000 6.989 +Time 4.345 0.000 4.357 > stopifnot(identical(med0, 1:6)) > med0 <- (1:6) > st1 <- showSys.time(pamxst.1 <- pam(x, 6, medoids = med0 , pamonce=1, trace.lev=2)) C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=1): medoids given - after build: medoids are 1 2 3 4 5 6 +pam()'s bswap(*, s=15.7788, pamonce=1): medoids given; after build: medoids are 1 2 3 4 5 6 swp new 1421 <-> 6 old; decreasing diss. 20991.1 by -15949.5 swp new 2153 <-> 4 old; decreasing diss. 5041.66 by -1676.25 swp new 915 <-> 3 old; decreasing diss. 3365.41 by -1671.37 @@ -1463,13 +1606,12 @@ swp new 2082 <-> 2696 old; decreasing diss. 1570.26 by -0.187256 end{bswap()}, end{cstat()} Time user system elapsed -Time 4.225 0.001 4.237 +Time 3.753 0.000 3.763 > stopifnot(identical(med0, 1:6)) > med0 <- (1:6) > st2 <- showSys.time(pamxst.2 <- pam(x, 6, medoids = med0 , pamonce=2, trace.lev=2)) C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=2): medoids given - after build: medoids are 1 2 3 4 5 6 +pam()'s bswap(*, s=15.7788, pamonce=2): medoids given; after build: medoids are 1 2 3 4 5 6 swp new 1421 <-> 6 old; decreasing diss. 20991.1 by -15949.5 swp new 2153 <-> 4 old; decreasing diss. 5041.66 by -1676.25 swp new 915 <-> 3 old; decreasing diss. 3365.41 by -1671.37 @@ -1483,13 +1625,12 @@ swp new 2082 <-> 2696 old; decreasing diss. 1570.26 by -0.187256 end{bswap()}, end{cstat()} Time user system elapsed -Time 1.68 0.00 1.68 +Time 2.519 0.001 2.530 > stopifnot(identical(med0, 1:6)) > med0 <- (1:6) > st3 <- showSys.time(pamxst.3 <- pam(x, 6, medoids = med0 , pamonce=3, trace.lev=2)) C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=3): medoids given - after build: medoids are 1 2 3 4 5 6 +pam()'s bswap(*, s=15.7788, pamonce=3): medoids given; after build: medoids are 1 2 3 4 5 6 swp new 1421 <-> 6 old; decreasing diss. 20991.1 by -15949.5 swp new 2153 <-> 4 old; decreasing diss. 5041.66 by -1676.25 swp new 915 <-> 3 old; decreasing diss. 3365.41 by -1671.37 @@ -1503,13 +1644,12 @@ swp new 2082 <-> 2696 old; decreasing diss. 1570.26 by -0.187256 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.661 0.000 0.661 +Time 0.854 0.000 0.857 > stopifnot(identical(med0, 1:6)) > med0 <- (1:6) > st4 <- showSys.time(pamxst.4 <- pam(x, 6, medoids = med0 , pamonce=4, trace.lev=2)) C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=4): medoids given - after build: medoids are 1 2 3 4 5 6 +pam()'s bswap(*, s=15.7788, pamonce=4): medoids given; after build: medoids are 1 2 3 4 5 6 swp new 1421 <-> 6 old; decreasing diss. 20991.1 by -15949.5 swp new 2153 <-> 4 old; decreasing diss. 5041.66 by -1676.25 swp new 915 <-> 3 old; decreasing diss. 3365.41 by -1671.37 @@ -1523,13 +1663,12 @@ fswp new 2082 <-> 2696 old; decreasing diss. 1570.26 by -0.187256 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.490 0.004 0.495 +Time 0.619 0.000 0.620 > stopifnot(identical(med0, 1:6)) > med0 <- (1:6) > st5 <- showSys.time(pamxst.5 <- pam(x, 6, medoids = med0 , pamonce=5, trace.lev=2)) C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] -pam()'s bswap(*, s=15.7788, pamonce=5): medoids given - after build: medoids are 1 2 3 4 5 6 +pam()'s bswap(*, s=15.7788, pamonce=5): medoids given; after build: medoids are 1 2 3 4 5 6 swp new 1421 <-> 6 old; decreasing diss. 20991.1 by -15949.5 swp new 2153 <-> 4 old; decreasing diss. 5041.66 by -1676.25 swp new 915 <-> 3 old; decreasing diss. 3365.41 by -1671.37 @@ -1543,20 +1682,140 @@ fswp new 2082 <-> 2696 old; decreasing diss. 1570.26 by -0.187256 end{bswap()}, end{cstat()} Time user system elapsed -Time 0.408 0.000 0.407 +Time 0.473 0.001 0.476 +> stopifnot(identical(med0, 1:6)) +> med0 <- (1:6) +> st6 <- showSys.time(pamxst.6 <- pam(x, 6, medoids = med0 , pamonce=6, trace.lev=2)) +C pam(): computing 3779876 dissimilarities from 2750 x 2 matrix: [Ok] +pam()'s bswap(*, s=15.7788, pamonce=6): medoids given; after build: medoids are 1 2 3 4 5 6 + swp new 7 <-> 6 old; decreasing diss. 20991.1 by -3.78677 + swp new 8 <-> 5 old; decreasing diss. 20987.4 by -25.0122 + swp new 9 <-> 2 old; decreasing diss. 20962.3 by -6.53934 + swp new 10 <-> 7 old; decreasing diss. 20955.8 by -0.133503 + swp new 11 <-> 9 old; decreasing diss. 20955.7 by -14.9294 + swp new 12 <-> 10 old; decreasing diss. 20940.7 by -2.35016 + swp new 13 <-> 12 old; decreasing diss. 20938.4 by -12.1267 + swp new 14 <-> 11 old; decreasing diss. 20926.3 by -2.99664 + swp new 15 <-> 13 old; decreasing diss. 20923.3 by -11.5871 + swp new 20 <-> 1 old; decreasing diss. 20911.7 by -0.0423835 + swp new 22 <-> 3 old; decreasing diss. 20911.6 by -8.76936 + swp new 23 <-> 20 old; decreasing diss. 20902.9 by -0.779336 + swp new 39 <-> 15 old; decreasing diss. 20902.1 by -0.285867 + swp new 44 <-> 4 old; decreasing diss. 20901.8 by -889.012 + swp new 45 <-> 14 old; decreasing diss. 20012.8 by -0.586001 + swp new 46 <-> 45 old; decreasing diss. 20012.2 by -1.1479 + swp new 57 <-> 39 old; decreasing diss. 20011.1 by -3.67274 + swp new 58 <-> 44 old; decreasing diss. 20007.4 by -189.36 + swp new 62 <-> 23 old; decreasing diss. 19818 by -0.626154 + swp new 66 <-> 46 old; decreasing diss. 19817.4 by -1.29082 + swp new 68 <-> 22 old; decreasing diss. 19816.1 by -0.580804 + swp new 75 <-> 62 old; decreasing diss. 19815.5 by -0.860328 + swp new 76 <-> 57 old; decreasing diss. 19814.7 by -1.97434 + swp new 171 <-> 58 old; decreasing diss. 19812.7 by -968.625 + swp new 185 <-> 75 old; decreasing diss. 18844.1 by -0.12972 + swp new 198 <-> 68 old; decreasing diss. 18843.9 by -0.533904 + swp new 204 <-> 198 old; decreasing diss. 18843.4 by -0.00928895 + swp new 218 <-> 185 old; decreasing diss. 18843.4 by -0.0287215 + swp new 280 <-> 204 old; decreasing diss. 18843.4 by -0.913559 + swp new 329 <-> 280 old; decreasing diss. 18842.5 by -0.101916 + swp new 361 <-> 8 old; decreasing diss. 18842.3 by -0.0966188 + swp new 402 <-> 361 old; decreasing diss. 18842.3 by -0.0394578 + swp new 501 <-> 171 old; decreasing diss. 18842.2 by -11833 + swp new 502 <-> 66 old; decreasing diss. 7009.24 by -309.206 + swp new 503 <-> 329 old; decreasing diss. 6700.03 by -887.644 + swp new 504 <-> 76 old; decreasing diss. 5812.39 by -28.554 + swp new 506 <-> 504 old; decreasing diss. 5783.83 by -14.2809 + swp new 507 <-> 506 old; decreasing diss. 5769.55 by -19.8604 + swp new 508 <-> 507 old; decreasing diss. 5749.69 by -7.88586 + swp new 515 <-> 501 old; decreasing diss. 5741.8 by -3.36477 + swp new 519 <-> 502 old; decreasing diss. 5738.44 by -1.16993 + swp new 523 <-> 515 old; decreasing diss. 5737.27 by -71.9147 + swp new 526 <-> 508 old; decreasing diss. 5665.35 by -1.56708 + swp new 533 <-> 526 old; decreasing diss. 5663.79 by -1.652 + swp new 537 <-> 519 old; decreasing diss. 5662.14 by -0.283073 + swp new 540 <-> 537 old; decreasing diss. 5661.85 by -2.35314 + swp new 545 <-> 533 old; decreasing diss. 5659.5 by -2.94604 + swp new 547 <-> 503 old; decreasing diss. 5656.55 by -221.229 + swp new 573 <-> 547 old; decreasing diss. 5435.32 by -574.75 + swp new 575 <-> 523 old; decreasing diss. 4860.57 by -17.1525 + swp new 579 <-> 573 old; decreasing diss. 4843.42 by -346.495 + swp new 593 <-> 575 old; decreasing diss. 4496.93 by -2.83188 + swp new 594 <-> 540 old; decreasing diss. 4494.1 by -0.50804 + swp new 618 <-> 545 old; decreasing diss. 4493.59 by -0.137577 + swp new 660 <-> 618 old; decreasing diss. 4493.45 by -4.45459 + swp new 663 <-> 593 old; decreasing diss. 4489 by -0.912682 + swp new 709 <-> 663 old; decreasing diss. 4488.08 by -1.44419 + swp new 848 <-> 594 old; decreasing diss. 4486.64 by -0.00137738 + swp new 991 <-> 709 old; decreasing diss. 4486.64 by -0.173764 + swp new 1242 <-> 660 old; decreasing diss. 4486.46 by -0.244432 + swp new 1251 <-> 579 old; decreasing diss. 4486.22 by -1369.29 + swp new 1252 <-> 402 old; decreasing diss. 3116.93 by -58.5165 + swp new 1253 <-> 1252 old; decreasing diss. 3058.42 by -169.451 + swp new 1255 <-> 1251 old; decreasing diss. 2888.97 by -30.8092 + swp new 1257 <-> 848 old; decreasing diss. 2858.16 by -70.3794 + swp new 1262 <-> 1255 old; decreasing diss. 2787.78 by -29.3154 + swp new 1266 <-> 1253 old; decreasing diss. 2758.46 by -64.8733 + swp new 1282 <-> 1262 old; decreasing diss. 2693.59 by -0.803303 + swp new 1283 <-> 1257 old; decreasing diss. 2692.79 by -238.314 + swp new 1284 <-> 1266 old; decreasing diss. 2454.47 by -6.79018 + swp new 1289 <-> 1284 old; decreasing diss. 2447.68 by -6.25715 + swp new 1291 <-> 1289 old; decreasing diss. 2441.42 by -1.33251 + swp new 1293 <-> 1291 old; decreasing diss. 2440.09 by -4.73682 + swp new 1299 <-> 1293 old; decreasing diss. 2435.35 by -5.10123 + swp new 1301 <-> 1282 old; decreasing diss. 2430.25 by -3.83834 + swp new 1322 <-> 1301 old; decreasing diss. 2426.41 by -1.61521 + swp new 1332 <-> 1322 old; decreasing diss. 2424.8 by -1.66893 + swp new 1335 <-> 1299 old; decreasing diss. 2423.13 by -9.28429 + swp new 1374 <-> 1332 old; decreasing diss. 2413.85 by -1.14706 + swp new 1469 <-> 1374 old; decreasing diss. 2412.7 by -0.0376604 + swp new 1583 <-> 1335 old; decreasing diss. 2412.66 by -0.0266074 + swp new 1612 <-> 1283 old; decreasing diss. 2412.64 by -1.78413 + swp new 2001 <-> 1612 old; decreasing diss. 2410.85 by -794.078 + swp new 2089 <-> 2001 old; decreasing diss. 1616.77 by -3.16676 + swp new 2153 <-> 2089 old; decreasing diss. 1613.61 by -5.2914 + swp new 12 <-> 218 old; decreasing diss. 1608.32 by -9.02144 + swp new 15 <-> 12 old; decreasing diss. 1599.29 by -2.88573 + swp new 16 <-> 15 old; decreasing diss. 1596.41 by -3.50571 + swp new 33 <-> 16 old; decreasing diss. 1592.9 by -0.382726 + swp new 56 <-> 33 old; decreasing diss. 1592.52 by -0.660581 + swp new 70 <-> 56 old; decreasing diss. 1591.86 by -9.63432 + swp new 86 <-> 70 old; decreasing diss. 1582.22 by -2.56554 + swp new 123 <-> 86 old; decreasing diss. 1579.66 by -1.30247 + swp new 414 <-> 123 old; decreasing diss. 1578.36 by -0.130313 + swp new 507 <-> 1242 old; decreasing diss. 1578.23 by -16.7114 + swp new 513 <-> 991 old; decreasing diss. 1561.51 by -2.15127 + swp new 518 <-> 507 old; decreasing diss. 1559.36 by -7.23052 + swp new 556 <-> 518 old; decreasing diss. 1552.13 by -1.79073 + swp new 622 <-> 513 old; decreasing diss. 1550.34 by -0.947204 + swp new 822 <-> 556 old; decreasing diss. 1549.4 by -0.320612 + swp new 926 <-> 622 old; decreasing diss. 1549.07 by -1.31521 + swp new 1106 <-> 926 old; decreasing diss. 1547.76 by -0.187491 + swp new 1124 <-> 822 old; decreasing diss. 1547.57 by -0.261824 + swp new 1194 <-> 1124 old; decreasing diss. 1547.31 by -0.0387596 + swp new 1256 <-> 1583 old; decreasing diss. 1547.27 by -1.04235 + swp new 1262 <-> 1469 old; decreasing diss. 1546.23 by -2.25214 + swp new 1429 <-> 1256 old; decreasing diss. 1543.98 by -0.359624 + swp new 1592 <-> 1429 old; decreasing diss. 1543.62 by -0.641983 + swp new 2286 <-> 2153 old; decreasing diss. 1542.98 by -0.109986 + swp new 2482 <-> 2286 old; decreasing diss. 1542.87 by -0.0744393 +end{bswap()}, end{cstat()} +Time user system elapsed +Time 0.282 0.001 0.284 > stopifnot(identical(med0, 1:6)) > stopifnot(all.equal(pamxst[-icall], pamxst.1 [-icall]), + all.equal(pamxst[-icall], pamxst.2 [-icall]), + all.equal(pamxst[-icall], pamxst.3 [-icall]), + all.equal(pamxst[-icall], pamxst.4 [-icall]), + all.equal(pamxst[-icall], pamxst.5 [-icall])) +> # FasterPAM finds a better solution here, by chance +> stopifnot(pamxst$objective >= pamxst.6$objective) > > > ## Last Line: > cat('Time elapsed: ', proc.time() - .proctime00,'\n') -Time elapsed: 24.245 0.054 24.376 0 0 +Time elapsed: 29.923 0.049 30.113 0 0 > > > proc.time() user system elapsed - 24.380 0.091 24.585 + 30.026 0.082 30.241