Bug fixed: package OK
[epclust.git] / epclust / R / main.R
index e3fa807..fe78e63 100644 (file)
 #' @param ncores_tasks Number of parallel tasks ('1' == sequential tasks)
 #' @param ncores_clust Number of parallel clusterings in one task
 #' @param sep Separator in CSV input file (if any provided)
-#' @param nbytes Number of bytes to serialize a floating-point number: 4 or 8
+#' @param nbytes 4 or 8 bytes to (de)serialize a floating-point number
 #' @param endian Endianness for (de)serialization: "little" or "big"
 #' @param verbose FALSE: nothing printed; TRUE: some execution traces
 #' @param parll TRUE: run in parallel. FALSE: run sequentially
-#' @param reuse_bin Re-use previously stored binary series and contributions
 #'
 #' @return A list:
 #' \itemize{
@@ -88,6 +87,7 @@
 #' @examples
 #' \dontrun{
 #' # WER distances computations are too long for CRAN (for now)
+#' parll = FALSE #on this small example, sequential run is faster
 #'
 #' # Random series around cos(x,2x,3x)/sin(x,2x,3x)
 #' x <- seq(0,50,0.05)
 #' permut <- (0:239)%%6 * 40 + (0:239)%/%6 + 1
 #' series = series[,permut]
 #' #dim(series) #c(240,1001)
-#' res_ascii <- claws(series, K1=30, K2=6, 100, random=FALSE, verbose=TRUE)
+#' res_ascii <- claws(series, K1=30, K2=6, nb_series_per_chunk=500,
+#'   nb_items_clust=100, random=FALSE, verbose=TRUE, parll=parll)
 #'
 #' # Same example, from CSV file
 #' csv_file <- tempfile(pattern="epclust_series.csv_")
 #' write.table(t(series), csv_file, sep=",", row.names=FALSE, col.names=FALSE)
-#' res_csv <- claws(csv_file, K1=30, K2=6, 100, random=FALSE)
+#' res_csv <- claws(csv_file, 30, 6, 500, 100, random=FALSE, parll=parll)
 #'
 #' # Same example, from binary file
 #' bin_file <- tempfile(pattern="epclust_series.bin_")
 #' endian <- "little"
 #' binarize(csv_file, bin_file, 500, ",", nbytes, endian)
 #' getSeries <- function(indices) getDataInFile(indices, bin_file, nbytes, endian)
-#' res_bin <- claws(getSeries, K1=30, K2=6, 100, random=FALSE)
+#' res_bin <- claws(getSeries, 30, 6, 500, 100, random=FALSE, parll=parll)
 #' unlink(csv_file)
 #' unlink(bin_file)
 #'
 #' serie_length <- as.integer( dbGetQuery(series_db,
 #'   paste("SELECT COUNT(*) FROM times_values WHERE id == ",indexToID_inDB[1],sep="")) )
 #' getSeries <- function(indices) {
+#'   indices = indices[ indices <= length(indexToID_inDB) ]
+#'   if (length(indices) == 0)
+#'     return (NULL)
 #'   request <- "SELECT id,value FROM times_values WHERE id in ("
 #'   for (i in seq_along(indices)) {
 #'     request <- paste(request, indexToID_inDB[ indices[i] ],  sep="")
 #'   }
 #'   request <- paste(request, ")", sep="")
 #'   df_series <- dbGetQuery(series_db, request)
-#'   if (nrow(df_series) >= 1)
-#'     matrix(df_series[,"value"], nrow=serie_length)
-#'   else
-#'     NULL
+#'   matrix(df_series[,"value"], nrow=serie_length)
 #' }
-#' # reuse_bin==FALSE: DB do not garantee ordering
-#' res_db <- claws(getSeries, K1=30, K2=6, 100, random=FALSE, reuse_bin=FALSE)
+#' res_db <- claws(getSeries, 30, 6, 500, 100, random=FALSE, parll=parll)
 #' dbDisconnect(series_db)
 #'
 #' # All results should be equal:
 #'   & res_ascii$ranks == res_db$ranks)
 #' }
 #' @export
-claws <- function(series, K1, K2, nb_series_per_chunk, nb_items_clust=7*K1,
+claws <- function(series, K1, K2, nb_series_per_chunk, nb_items_clust=5*K1,
        algoClust1=function(data,K) cluster::pam(t(data),K,diss=FALSE,pamonce=1)$id.med,
        algoClust2=function(dists,K) cluster::pam(dists,K,diss=TRUE,pamonce=1)$id.med,
        wav_filt="d8", contrib_type="absolute", WER="end", smooth_lvl=3, nvoice=4,
        random=TRUE, ntasks=1, ncores_tasks=1, ncores_clust=3, sep=",", nbytes=4,
-       endian=.Platform$endian, verbose=FALSE, parll=TRUE, reuse_bin=TRUE)
+       endian=.Platform$endian, verbose=FALSE, parll=TRUE)
 {
-
-
-#TODO: comprendre differences.......... debuguer getSeries for DB
-
-
        # Check/transform arguments
        if (!is.matrix(series) && !bigmemory::is.big.matrix(series)
                && !is.function(series)
@@ -206,11 +201,8 @@ claws <- function(series, K1, K2, nb_series_per_chunk, nb_items_clust=7*K1,
                if (verbose)
                        cat("...Serialize time-series (or retrieve past binary file)\n")
                series_file <- ".series.epclust.bin"
-               if (!file.exists(series_file) || !reuse_bin)
-               {
-                       unlink(series_file,)
+               if (!file.exists(series_file))
                        binarize(series, series_file, nb_series_per_chunk, sep, nbytes, endian)
-               }
                getSeries <- function(inds) getDataInFile(inds, series_file, nbytes, endian)
        }
        else
@@ -220,9 +212,8 @@ claws <- function(series, K1, K2, nb_series_per_chunk, nb_items_clust=7*K1,
        contribs_file <- ".contribs.epclust.bin"
        if (verbose)
                cat("...Compute contributions and serialize them (or retrieve past binary file)\n")
-       if (!file.exists(contribs_file) || !reuse_bin)
+       if (!file.exists(contribs_file))
        {
-               unlink(contribs_file,)
                nb_curves <- binarizeTransform(getSeries,
                        function(curves) curvesToContribs(curves, wav_filt, contrib_type),
                        contribs_file, nb_series_per_chunk, nbytes, endian)