From 5e7e30b6b502e87ff21b81af8bc1d14df8df8b54 Mon Sep 17 00:00:00 2001 From: Francisco Bischoff Date: Mon, 3 Jun 2019 16:52:12 +0100 Subject: [PATCH] RC Finished --- .Rbuildignore | 1 + DESCRIPTION | 7 +- NAMESPACE | 12 ++ NEWS.md | 2 +- R/dist_profile.R | 6 +- R/fluss.R | 10 +- R/mass-pre-w.R | 3 +- R/mass.R | 6 +- R/mass_weighted.R | 6 +- R/plot.R | 12 +- R/stompi.R | 18 +- R/subset.R | 67 +++++- R/tsmp.R | 1 + README.md | 2 +- cran-comments.md | 2 +- docs/CODE_OF_CONDUCT.html | 2 +- docs/CONTRIBUTING.html | 2 +- docs/LICENSE.html | 114 +++++------ docs/articles/index.html | 2 +- docs/articles/press.html | 8 +- docs/authors.html | 6 +- docs/index.html | 43 ++-- docs/news/index.html | 66 +++--- docs/pkgdown.yml | 2 +- docs/reference/as.matrixprofile-1.png | Bin 25114 -> 25140 bytes docs/reference/as.matrixprofile-2.png | Bin 22091 -> 22064 bytes docs/reference/as.matrixprofile.html | 2 +- docs/reference/av_apply.html | 2 +- docs/reference/av_complexity.html | 2 +- docs/reference/av_hardlimit_artifact.html | 2 +- docs/reference/av_motion_artifact.html | 2 +- docs/reference/av_stop_word.html | 2 +- docs/reference/av_zerocrossing.html | 2 +- docs/reference/dist_profile.html | 12 +- docs/reference/fast_movavg.html | 2 +- docs/reference/fast_movsd.html | 2 +- docs/reference/find_chains.html | 2 +- docs/reference/find_discord.html | 2 +- docs/reference/find_motif.html | 2 +- docs/reference/floss.html | 236 ++++++++++++++++++++++ docs/reference/floss_cac.html | 219 ++++++++++++++++++++ docs/reference/floss_extract.html | 212 +++++++++++++++++++ docs/reference/fluss.html | 10 +- docs/reference/fluss_cac.html | 8 +- docs/reference/fluss_extract.html | 10 +- docs/reference/fluss_score.html | 8 +- docs/reference/get_data.html | 2 +- docs/reference/index.html | 40 +++- docs/reference/mass-deprecated.html | 5 +- docs/reference/mass_pre.html | 2 +- docs/reference/mass_pre_w.html | 5 +- docs/reference/mass_v2.html | 2 +- docs/reference/mass_v3.html | 2 +- docs/reference/mass_weighted.html | 5 +- docs/reference/min_mp_idx.html | 188 +++++++++++++++++ docs/reference/mp_fluss_data.html | 2 +- docs/reference/mp_gait_data.html | 2 +- docs/reference/mp_meat_data.html | 2 +- docs/reference/mp_test_data.html | 2 +- docs/reference/mp_toy_data.html | 2 +- docs/reference/mstomp.html | 4 +- docs/reference/pipe.html | 2 +- docs/reference/plot-1.png | Bin 22417 -> 22502 bytes docs/reference/plot.html | 13 +- docs/reference/plot_arcs-1.png | Bin 8834 -> 8834 bytes docs/reference/plot_arcs.html | 12 +- docs/reference/remove_class.html | 186 +++++++++++++++++ docs/reference/salient_mds-1.png | Bin 9875 -> 9875 bytes docs/reference/salient_mds.html | 2 +- docs/reference/salient_score.html | 2 +- docs/reference/salient_subsequences.html | 2 +- docs/reference/scrimp.html | 2 +- docs/reference/sdts_predict.html | 14 +- docs/reference/sdts_score.html | 14 +- docs/reference/sdts_train.html | 14 +- docs/reference/set_data.html | 2 +- docs/reference/simple_fast.html | 2 +- docs/reference/stamp.html | 4 +- docs/reference/stomp.html | 4 +- docs/reference/stompi_update.html | 191 +++++++++++++++++ docs/reference/tsmp-deprecated.html | 2 +- docs/reference/tsmp.html | 11 +- docs/reference/valmod.html | 4 +- inst/WORDLIST | 1 + man/dist_profile.Rd | 3 +- man/mass-deprecated.Rd | 3 +- man/mass_pre_w.Rd | 3 +- man/mass_weighted.Rd | 3 +- man/plot_arcs.Rd | 4 + man/tsmp.Rd | 2 + tests/testthat/test-subset.R | 14 +- 91 files changed, 1684 insertions(+), 236 deletions(-) create mode 100644 docs/reference/floss.html create mode 100644 docs/reference/floss_cac.html create mode 100644 docs/reference/floss_extract.html create mode 100644 docs/reference/min_mp_idx.html create mode 100644 docs/reference/remove_class.html create mode 100644 docs/reference/stompi_update.html diff --git a/.Rbuildignore b/.Rbuildignore index 1cd393c..81f524f 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -7,6 +7,7 @@ ^cran-comments\.md$ ^packrat/ ^docs/ +^dev/ ^\.Rprofile$ ^\.travis\.yml$ ^.*\.Rproj$ diff --git a/DESCRIPTION b/DESCRIPTION index b8bfcfc..2ebe0ae 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: tsmp Type: Package Title: Time Series with Matrix Profile -Version: 0.3.5.9001 +Version: 0.3.5.9000 Authors@R: c( person("Francisco", "Bischoff", email = "fbischoff@med.up.pt", role = c("aut", "cre"), comment = c(ORCID = "https://orcid.org/0000-0002-5301-8672")), @@ -29,11 +29,12 @@ LazyData: true Roxygen: list(markdown = TRUE) RoxygenNote: 6.1.1.9000 NeedsCompilation: no -Suggests: +Suggests: spelling, testthat, knitr, rmarkdown, gdtools, - vdiffr + vdiffr, + animation VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index e47b49e..54d4899 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,17 @@ # Generated by roxygen2: do not edit by hand +S3method("[",AnnotationVector) +S3method("[",ArcCount) +S3method("[",Chain) +S3method("[",Discord) +S3method("[",Floss) +S3method("[",Fluss) +S3method("[",MatrixProfile) +S3method("[",Motif) +S3method("[",MultiMatrixProfile) +S3method("[",MultiMotif) +S3method("[",Salient) +S3method("[",SimpleMatrixProfile) S3method(find_discord,MatrixProfile) S3method(find_motif,MatrixProfile) S3method(find_motif,MultiMatrixProfile) diff --git a/NEWS.md b/NEWS.md index de4e079..1320f68 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,7 +1,7 @@ NEWS ================ Francisco Bischoff -\- 01 Jun 2019 +\- 03 Jun 2019 diff --git a/R/dist_profile.R b/R/dist_profile.R index 189c322..fbbfcb3 100644 --- a/R/dist_profile.R +++ b/R/dist_profile.R @@ -61,9 +61,11 @@ #' # weighted #' weight <- c(rep(1, w / 3), rep(0.5, w / 3), rep(0.8, w / 3)) # just an example #' -#' nn <- dist_profile(ref_data, ref_data, window_size = w, index = 1, method = "weighted", weight = weight) +#' nn <- dist_profile(ref_data, ref_data, window_size = w, index = 1, method = "weighted", +#' weight = weight) #' distance_profile <- Re(sqrt(nn$distance_profile)) -dist_profile <- function(data, query, ..., window_size = NULL, method = "v3", index = 1, k = NULL, weight = NULL, paa = 1) { +dist_profile <- function(data, query, ..., window_size = NULL, method = "v3", index = 1, k = NULL, + weight = NULL, paa = 1) { ## ---- Verify if method exists ---- # set as v3 if no method is entered diff --git a/R/fluss.R b/R/fluss.R index 424eb03..48d5f50 100644 --- a/R/fluss.R +++ b/R/fluss.R @@ -82,7 +82,7 @@ floss <- function(.mp, new_data, data_window, threshold = 1, exclusion_zone = NU .mp$cac_final <- NULL return(.mp) } else { - .mp <- stompi_update(.mp, head(new_data, data_window - data_size)) + .mp <- stompi_update(.mp, utils::head(new_data, data_window - data_size)) new_data <- new_data[(data_window - data_size + 1):new_data_size] } } @@ -103,7 +103,7 @@ floss <- function(.mp, new_data, data_window, threshold = 1, exclusion_zone = NU .mp$cac_final <- c( rep(NA, chunk_size + mp_offset - chunk_size), - head(.mp$cac, -(round(data_window * (1 - vars()$kmode) - (1 - vars()$kmode) * .mp$w) - 0.5 * chunk_size + ifelse(mp_offset > 0, 1, 2))) + utils::head(.mp$cac, -(round(data_window * (1 - vars()$kmode) - (1 - vars()$kmode) * .mp$w) - 0.5 * chunk_size + ifelse(mp_offset > 0, 1, 2))) ) na_head <- round(vars()$kmode * data_window + (0.5 * chunk_size - vars()$kmode * .mp$w)) + mp_offset @@ -130,7 +130,7 @@ floss <- function(.mp, new_data, data_window, threshold = 1, exclusion_zone = NU res <- floss_extract(.mp, threshold) if (!keep_cac) { - res$cac_final <- tail(res$cac_final, -length(new_data)) + res$cac_final <- utils::tail(res$cac_final, -length(new_data)) } return(res) @@ -179,9 +179,9 @@ floss_extract <- function(.mpac, threshold = 1, exclusion_zone = NULL) { new_data <- ifelse(is.null(attr(.mpac, "new_data")), 0, attr(.mpac, "new_data")) if (offset == 0 || cac_fin_len == floor((mp_len * vars()$kmode + new_data * 1.5))) { - cac <- tail(.mpac$cac_final, -new_data) + cac <- utils::tail(.mpac$cac_final, -new_data) } else { - cac <- tail(.mpac$cac_final, -offset) + cac <- utils::tail(.mpac$cac_final, -offset) } cac[cac > threshold] <- NA diff --git a/R/mass-pre-w.R b/R/mass-pre-w.R index 0de50a6..01b4a11 100644 --- a/R/mass-pre-w.R +++ b/R/mass-pre-w.R @@ -20,7 +20,8 @@ #' w <- mp_toy_data$sub_len #' ref_data <- mp_toy_data$data[, 1] #' query_data <- mp_toy_data$data[, 1] -#' weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), rep(1, mp_toy_data$sub_len / 3)) +#' weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), +#' rep(1, mp_toy_data$sub_len / 3)) #' #' pre <- tsmp:::mass_pre_w(ref_data, query_data, w, weight) #' diff --git a/R/mass.R b/R/mass.R index 26518e2..62db374 100644 --- a/R/mass.R +++ b/R/mass.R @@ -22,7 +22,8 @@ #' @references Website: #' @name mass-deprecated -#' @usage mass(data_fft, query_window, data_size, window_size, data_mean, data_sd, query_mean, query_sd) +#' @usage mass(data_fft, query_window, data_size, window_size, data_mean, data_sd, +#' query_mean, query_sd) #' @seealso \code{\link{tsmp-deprecated}} #' @keywords internal NULL @@ -33,7 +34,8 @@ NULL #' #' @export -mass <- function(data_fft, query_window, data_size, window_size, data_mean, data_sd, query_mean, query_sd) { +mass <- function(data_fft, query_window, data_size, window_size, data_mean, data_sd, + query_mean, query_sd) { .Deprecated("dist_profile") # pre-process query for fft query_window <- rev(query_window) diff --git a/R/mass_weighted.R b/R/mass_weighted.R index 068cd3f..2022fde 100644 --- a/R/mass_weighted.R +++ b/R/mass_weighted.R @@ -28,7 +28,8 @@ #' w <- mp_toy_data$sub_len #' ref_data <- mp_toy_data$data[, 1] #' query_data <- mp_toy_data$data[, 1] -#' weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), rep(1, mp_toy_data$sub_len / 3)) +#' weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), +#' rep(1, mp_toy_data$sub_len / 3)) #' #' pre <- tsmp:::mass_pre_w(ref_data, query_data, w, weight) #' @@ -39,7 +40,8 @@ #' pre$data_mean, pre$data_sd, pre$data_pre, pre$weight #' ) #' } -mass_weighted <- function(query_window, window_size, data_fft, data_size, data_mean, data_sd, data_pre, weight, ...) { +mass_weighted <- function(query_window, window_size, data_fft, data_size, data_mean, data_sd, + data_pre, weight, ...) { if (length(weight) != window_size) { stop("'weight' must have the same length as the 'window_size'.") } diff --git a/R/plot.R b/R/plot.R index 205e8c9..9abb0b3 100644 --- a/R/plot.R +++ b/R/plot.R @@ -29,6 +29,8 @@ #' @param ylab a `string`. (Default is `""`). Y label. #' @param xlab a `string`. (Default is `"Profile Index"`). X label. #' @param ... further arguments to be passed to [plot()]. See [par()]. +#' @param xmin an `int`. (Default is `NULL`). Set the minimum value of x axis. +#' @param xmax an `int`. (Default is `NULL`). Set the maximum value of x axis. #' #' @return None #' @keywords hplot @@ -164,8 +166,8 @@ plot.ArcCount <- function(x, data, type = c("data", "matrix"), exclusion_zone = if (cac_size < nrow(profile_index)) { warning("cac_size < profile_index") cac_offset <- nrow(profile_index) - cac_size - plot_data <- as.matrix(tail(plot_data, cac_size)) - profile_index <- as.matrix(tail(profile_index, cac_size) - cac_offset) + plot_data <- as.matrix(utils::tail(plot_data, cac_size)) + profile_index <- as.matrix(utils::tail(profile_index, cac_size) - cac_offset) } xnum <- seq_len(nrow(x$mp) + min(x$w) - 1) @@ -390,7 +392,7 @@ plot.SimpleMatrixProfile <- function(x, ylab = "distance", xlab = "index", main if (n_dim > 1) { for (i in 2:n_dim) { - lines(xnum, x$data[[1]][, i], main = paste0("Data"), ylab = "", xlab = xlab, col = i, ...) + graphics::lines(xnum, x$data[[1]][, i], main = paste0("Data"), ylab = "", xlab = xlab, col = i, ...) } } @@ -402,7 +404,7 @@ plot.SimpleMatrixProfile <- function(x, ylab = "distance", xlab = "index", main if (n_dim > 1) { for (i in 2:n_dim) { - lines(xnum, x$data[[2]][, i], main = paste0("Data"), ylab = "", xlab = xlab, col = i, ...) + graphics::lines(xnum, x$data[[2]][, i], main = paste0("Data"), ylab = "", xlab = xlab, col = i, ...) } } } @@ -540,7 +542,7 @@ plot.Floss <- function(x, data, type = c("data", "matrix"), if (cac_fin_len == floor((mp_len * vars()$kmode + new_data / 2))) { cac <- x$cac_final } else { - cac <- tail(x$cac_final, -offset) + cac <- utils::tail(x$cac_final, -offset) } cac_size <- length(cac) cac <- c(cac, rep(NA, nrow(x$mp) + min(x$w) - 1 - cac_size)) diff --git a/R/stompi.R b/R/stompi.R index 635a352..ada5745 100644 --- a/R/stompi.R +++ b/R/stompi.R @@ -95,16 +95,16 @@ stompi_update <- function(.mp, new_data, history_size = FALSE) { } if (history_size && (data_upd_size > history_size)) { - data_upd <- tail(data_upd, history_size) + data_upd <- utils::tail(data_upd, history_size) mp_new_size <- history_size - .mp$w + 1 offset <- data_upd_size - history_size - mp_new <- tail(mp_new, mp_new_size) - pi_new <- tail(pi_new - offset, mp_new_size) - lmp_new <- tail(lmp_new, mp_new_size) - lpi_new <- tail(lpi_new - offset, mp_new_size) - rmp_new <- tail(rmp_new, mp_new_size) - rpi_new <- tail(rpi_new - offset, mp_new_size) + mp_new <- utils::tail(mp_new, mp_new_size) + pi_new <- utils::tail(pi_new - offset, mp_new_size) + lmp_new <- utils::tail(lmp_new, mp_new_size) + lpi_new <- utils::tail(lpi_new - offset, mp_new_size) + rmp_new <- utils::tail(rmp_new, mp_new_size) + rpi_new <- utils::tail(rpi_new - offset, mp_new_size) if (is.null(attr(.mp, "offset"))) { attr(.mp, "offset") <- offset @@ -112,7 +112,7 @@ stompi_update <- function(.mp, new_data, history_size = FALSE) { attr(.mp, "offset") <- attr(.mp, "offset") + offset } - # pi_new <- tail(pi_new - attr(.mp, "offset"), mp_new_size) + # pi_new <- utils::tail(pi_new - attr(.mp, "offset"), mp_new_size) } .mp$mp <- as.matrix(mp_new) @@ -126,7 +126,7 @@ stompi_update <- function(.mp, new_data, history_size = FALSE) { # TODO: with tail or not (tail will recompute some things) # if (history_size && (data_upd_size > history_size)) { - # return(tail(.mp, history_size)) + # return(utils::tail(.mp, history_size)) # } else { return(.mp) # } diff --git a/R/subset.R b/R/subset.R index 4bf9080..436424b 100644 --- a/R/subset.R +++ b/R/subset.R @@ -1,5 +1,10 @@ #---- Subset Chains ---- +#' @export +#' @keywords internal +#' @noRd +#' + `[.Chain` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "Chains" @@ -41,6 +46,11 @@ #---- Subset Salient ---- +#' @export +#' @keywords internal +#' @noRd +#' + `[.Salient` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "Salient" @@ -63,6 +73,11 @@ #---- Subset Annotations ---- +#' @export +#' @keywords internal +#' @noRd +#' + `[.AnnotationVector` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "AnnotationVector" @@ -83,6 +98,12 @@ } #---- Subset Fluss ---- + +#' @export +#' @keywords internal +#' @noRd +#' + `[.Fluss` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "Fluss" @@ -93,7 +114,12 @@ x } -# + +#' @export +#' @keywords internal +#' @noRd +#' + `[.Floss` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "Floss" @@ -104,7 +130,12 @@ x } -# + +#' @export +#' @keywords internal +#' @noRd +#' + `[.ArcCount` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "ArcCount" @@ -118,6 +149,11 @@ #---- Subset Discord ---- +#' @export +#' @keywords internal +#' @noRd +#' + `[.Discord` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "Discord" @@ -161,6 +197,11 @@ #---- Subset Motifs ---- +#' @export +#' @keywords internal +#' @noRd +#' + `[.MultiMotif` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "MultiMotif" @@ -204,6 +245,11 @@ x } +#' @export +#' @keywords internal +#' @noRd +#' + `[.Motif` <- function(x, ..., drop = FALSE) { x <- NextMethod(object = x) attr(x, "subsetting") <- "Motif" @@ -247,6 +293,11 @@ #---- Subset Matrices ---- +#' @export +#' @keywords internal +#' @noRd +#' + `[.MatrixProfile` <- function(x, ..., drop = FALSE) { # str(...) # y <- NextMethod("[") @@ -330,6 +381,11 @@ } } +#' @export +#' @keywords internal +#' @noRd +#' + `[.MultiMatrixProfile` <- function(x, ..., drop = FALSE) { subset <- c(...) sub_size <- length(subset) @@ -393,6 +449,11 @@ } } +#' @export +#' @keywords internal +#' @noRd +#' + `[.SimpleMatrixProfile` <- function(x, ..., drop = FALSE) { subset <- c(...) sub_size <- length(subset) @@ -482,10 +543,12 @@ head.MatrixProfile <- function(x, n = 2 * max(x$w), ...) { return(x[1:ed_idx]) } + head.MultiMatrixProfile <- function(x, n = 2 * max(x$w), ...) { return(head.MatrixProfile(x, n, ...)) } + head.SimpleMatrixProfile <- function(x, n = 2 * max(x$w), ...) { return(head.MatrixProfile(x, n, ...)) } diff --git a/R/tsmp.R b/R/tsmp.R index 7fe54e0..a8a86e5 100644 --- a/R/tsmp.R +++ b/R/tsmp.R @@ -65,6 +65,7 @@ #' @param exc_dim an `int` or `vector` of which dimensions to exclude (default is `NULL`). See #' details. #' @param heap_size an `int`. (Default is `50`). Size of the distance profile heap buffer. +#' @param paa an `int`. (Default is `1`). Factor of PAA reduction (2 == half of size) #' @param .keep_data a `logical`. (Default is `TRUE`). Keeps the data embedded to resultant object. #' #' @return Returns the matrix profile `mp` and profile index `pi`. It also returns the left and diff --git a/README.md b/README.md index 6c8dba7..cf7cbd5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ README ================ Francisco Bischoff -\- 01 Jun 2019 +\- 03 Jun 2019 diff --git a/cran-comments.md b/cran-comments.md index cd11751..78de17c 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,5 +1,5 @@ ## Comments - +Added one suggestion package: annimation ## Test environments * Rhub diff --git a/docs/CODE_OF_CONDUCT.html b/docs/CODE_OF_CONDUCT.html index c580cc3..e764be8 100644 --- a/docs/CODE_OF_CONDUCT.html +++ b/docs/CODE_OF_CONDUCT.html @@ -63,7 +63,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/CONTRIBUTING.html b/docs/CONTRIBUTING.html index b43916d..e6f8c59 100644 --- a/docs/CONTRIBUTING.html +++ b/docs/CONTRIBUTING.html @@ -63,7 +63,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/LICENSE.html b/docs/LICENSE.html index ceee57e..6403d2c 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -63,7 +63,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -119,7 +119,7 @@

GNU General Public License

-

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>

+

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

@@ -138,9 +138,9 @@

TERMS AND CONDITIONS

-
+

-0. Definitions

+0. Definitions

“This License” refers to version 3 of the GNU General Public License.

“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

@@ -150,9 +150,9 @@

To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

-
+

-1. Source Code

+1. Source Code

The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

@@ -160,28 +160,28 @@

The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

The Corresponding Source for a work in source code form is that same work.

-
+

-2. Basic Permissions

+2. Basic Permissions

All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

- diff --git a/docs/reference/mp_test_data.html b/docs/reference/mp_test_data.html index 6aced60..0054463 100644 --- a/docs/reference/mp_test_data.html +++ b/docs/reference/mp_test_data.html @@ -66,7 +66,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016
diff --git a/docs/reference/mp_toy_data.html b/docs/reference/mp_toy_data.html index 6658603..71fc1f9 100644 --- a/docs/reference/mp_toy_data.html +++ b/docs/reference/mp_toy_data.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016
diff --git a/docs/reference/mstomp.html b/docs/reference/mstomp.html index 3f9aec8..626ac45 100644 --- a/docs/reference/mstomp.html +++ b/docs/reference/mstomp.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016
@@ -224,7 +224,7 @@

Examp # force using dimensions 1 and 2 mp <- mstomp(mp_toy_data$data[1:200, ], 30, must_dim = c(1, 2)) # exclude dimensions 2 and 3 -mp <- mstomp(mp_toy_data$data[1:200, ], 30, exc_dim = c(2, 3)) +mp2 <- mstomp(mp_toy_data$data[1:200, ], 30, exc_dim = c(2, 3)) # }
diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html index c6869fc..d87926b 100644 --- a/docs/reference/pipe.html +++ b/docs/reference/pipe.html @@ -66,7 +66,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/plot-1.png b/docs/reference/plot-1.png index d1948330e91c46aa3a122a4a94584dc084ecf2f8..0b66c4e427228b10ba741be9d005803dc37076b4 100644 GIT binary patch literal 22502 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 z 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 literal 22417 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 UQ(u-i|9stIW^8SQKjC)mFSo~)egFUf diff --git a/docs/reference/plot.html b/docs/reference/plot.html index 1c8aa38..c56ea0f 100644 --- a/docs/reference/plot.html +++ b/docs/reference/plot.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -135,11 +135,11 @@

Plot a TSMP object

# S3 method for Valmod plot(x, ylab = "distance", xlab = "index", - main = "Valmod Matrix Profile", ...) + main = "Valmod Matrix Profile", data = FALSE, ...) # S3 method for MatrixProfile plot(x, ylab = "distance", xlab = "index", - main = "Unidimensional Matrix Profile", ...) + main = "Unidimensional Matrix Profile", data = FALSE, ...) # S3 method for MultiMatrixProfile plot(x, ylab = "distance", xlab = "index", @@ -147,13 +147,18 @@

Plot a TSMP object

# S3 method for SimpleMatrixProfile plot(x, ylab = "distance", - xlab = "index", main = "SiMPle Matrix Profile", ...) + xlab = "index", main = "SiMPle Matrix Profile", data = FALSE, ...) # S3 method for Fluss plot(x, data, type = c("data", "matrix"), main = "Fast Low-cost Unipotent Semantic Segmentation", xlab = "index", ylab = "", ...) +# S3 method for Floss +plot(x, data, type = c("data", "matrix"), + main = "Fast Low-cost Online Semantic Segmentation", xlab = "index", + ylab = "", ...) + # S3 method for Chain plot(x, data, type = c("data", "matrix"), main = "Chain Discover", xlab = "index", ylab = "", ...) diff --git a/docs/reference/plot_arcs-1.png b/docs/reference/plot_arcs-1.png index 6427ab363ccd878997b8653a6d4df294736075c9..035908a982b642ac57f985870bfb88c8129222e3 100644 GIT binary patch delta 240 zcmWm5F-n7R3lP8e32|a^ra+drx zU-ZsJ^e^tM{g^SsPw>J92tKoOhGpY^jgH5cs8k gYJAjSjV?8QPrI*|TM>CUKJK30uNU{<`^DYOKZk>MBLDyZ delta 240 zcmWm5F-pT>3Q?CF(nZ`tm!6>Y&b#yOZG*YUN<>9WZcJ1~J0Wi3TzK@hT1@k_OlRs1>Qq1x+wH~rS(}=Rc_$1s zgt65L11eC3Hvw9%wQHr{k|ih0Sh)nHbzEd#bAsoS|uu388u#O dutt{}f2XUjmuC^VJ>K6vd@N`CpU2ty`X5-^ZZ`k` diff --git a/docs/reference/plot_arcs.html b/docs/reference/plot_arcs.html index 869bd95..0925fa9 100644 --- a/docs/reference/plot_arcs.html +++ b/docs/reference/plot_arcs.html @@ -68,7 +68,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -135,7 +135,7 @@

Plot arcs between indexes of a Profile Index

plot_arcs(pairs, alpha = NULL, quality = 30, lwd = 15,
   col = c("blue", "orange"), main = "Arc Plot", ylab = "",
-  xlab = "Profile Index", ...)
+ xlab = "Profile Index", xmin = NULL, xmax = NULL, ...)

Arguments

@@ -174,6 +174,14 @@

Arg

+ + + + + + + + diff --git a/docs/reference/remove_class.html b/docs/reference/remove_class.html new file mode 100644 index 0000000..4c7ae08 --- /dev/null +++ b/docs/reference/remove_class.html @@ -0,0 +1,186 @@ + + + + + + + + +Remove a <code>TSMP</code> class from an object — remove_class • tsmp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+
+ + +
+ +

Remove a TSMP class from an object

+ +
+ +
remove_class(x, class)
+ +

Arguments

+
xlab

a string. (Default is "Profile Index"). X label.

xmin

an int. (Default is NULL). Set the minimum value of x axis.

xmax

an int. (Default is NULL). Set the maximum value of x axis.

...

further arguments to be passed to plot(). See par().

+ + + + + + + + + +
x

a TSMP object

class

character string with the class name

+ +

Value

+ +

the object without the class

+ + +

Examples

+
w <- 50 +data <- mp_gait_data +mp <- tsmp(data, window_size = w, exclusion_zone = 1 / 4, verbose = 0) +mp <- find_chains(mp) +# Remove the "Chain" class information +mp <- remove_class(mp, "Chain")
+ + + + +
+ + +
+

Site built with pkgdown 1.3.0.

+
+
+ + + + + + + diff --git a/docs/reference/salient_mds-1.png b/docs/reference/salient_mds-1.png index fc7a59d24b19f2ae13ebac7dba76728696d086b3..f68a52c9e06519754c1ae50569171993503df35c 100644 GIT binary patch delta 231 zcmW-Yu?+%23TQl6@sGBVwlEs!tX>-@~}#= r!6sXe;hKUMq9{<(jcRpOPc7D}S~HAkOmn(sah7_{@9Xz-IX$mG tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/salient_score.html b/docs/reference/salient_score.html index 36a7de4..45b82a4 100644 --- a/docs/reference/salient_score.html +++ b/docs/reference/salient_score.html @@ -67,7 +67,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/salient_subsequences.html b/docs/reference/salient_subsequences.html index 12ef9d6..7aec2f5 100644 --- a/docs/reference/salient_subsequences.html +++ b/docs/reference/salient_subsequences.html @@ -66,7 +66,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/scrimp.html b/docs/reference/scrimp.html index 8e8ad36..31ef41e 100644 --- a/docs/reference/scrimp.html +++ b/docs/reference/scrimp.html @@ -67,7 +67,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/sdts_predict.html b/docs/reference/sdts_predict.html index 5bf76d0..5dc3de9 100644 --- a/docs/reference/sdts_predict.html +++ b/docs/reference/sdts_predict.html @@ -69,7 +69,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -181,7 +181,17 @@

Examp tr_label <- mp_test_data$train$label[subs] te_data <- mp_test_data$test$data[subs] te_label <- mp_test_data$test$label[subs] -model <- sdts_train(tr_data, tr_label, w, verbose = 0)
#> Error in { work_len <- length(idx_work[[i]]) pro_muls <- matrix(Inf, matrix_profile_size, 1) pro_idxs <- matrix(-1, matrix_profile_size, 1) if (length(args) > 1) { pro_muls_right <- pro_muls_left <- NULL pro_idxs_right <- pro_idxs_left <- NULL } else { pro_muls_right <- pro_muls_left <- pro_muls pro_idxs_right <- pro_idxs_left <- pro_idxs } dist_pro <- matrix(0, matrix_profile_size, 1) last_product <- matrix(0, matrix_profile_size, 1) drop_value <- matrix(0, 1, 1) for (j in 1:work_len) { idx_st <- idx_work[[i]][1] idx_ed <- idx_work[[i]][work_len] idx <- idx_work[[i]][j] query_window <- as.matrix(query[idx:(idx + window_size - 1), 1]) if (j == 1) { nni <- dist_profile(data, query, nn, index = idx) dist_pro[, 1] <- nni$distance_profile last_product[, 1] <- nni$last_product } else { last_product[2:(data_size - window_size + 1), 1] <- last_product[1:(data_size - window_size), 1] - data[1:(data_size - window_size), 1] * drop_value + data[(window_size + 1):data_size, 1] * query_window[window_size, 1] last_product[1, 1] <- first_product[idx, 1] dist_pro <- 2 * (window_size - (last_product - window_size * nni$par$data_mean * nni$par$query_mean[idx])/(nni$par$data_sd * nni$par$query_sd[idx])) } dist_pro <- Re(sqrt(dist_pro)) drop_value <- query_window[1, 1] if (exclusion_zone > 0) { exc_st <- max(1, idx - exclusion_zone) exc_ed <- min(matrix_profile_size, idx + exclusion_zone) dist_pro[exc_st:exc_ed, 1] <- Inf } dist_pro[nni$par$data_sd < vars()$eps] <- Inf if (skip_location[idx] || any(nni$par$query_sd[idx] < vars()$eps)) { dist_pro[] <- Inf } dist_pro[skip_location] <- Inf if (length(args) == 1) { ind <- (dist_pro[idx:matrix_profile_size] < pro_muls_left[idx:matrix_profile_size]) ind <- c(rep(FALSE, (idx - 1)), ind) pro_muls_left[ind] <- dist_pro[ind] pro_idxs_left[which(ind)] <- idx ind <- (dist_pro[1:idx] < pro_muls_right[1:idx]) ind <- c(ind, rep(FALSE, matrix_profile_size - idx)) pro_muls_right[ind] <- dist_pro[ind] pro_idxs_right[which(ind)] <- idx } ind <- (dist_pro < pro_muls) pro_muls[ind] <- dist_pro[ind] pro_idxs[which(ind)] <- idx } res <- list(pro_muls = pro_muls, pro_idxs = pro_idxs, pro_muls_left = pro_muls_left, pro_idxs_left = pro_idxs_left, pro_muls_right = pro_muls_right, pro_idxs_right = pro_idxs_right) res}: task 2 failed - "NAs are not allowed in subscripted assignments"
predict <- sdts_predict(model, te_data, round(mean(w)))
#> Error in sdts_predict(model, te_data, round(mean(w))): object 'model' not found
sdts_score(predict, te_label, 1)
#> Error in pred_tmp[seq_len(length(pred))] <- pred: incompatible types (from closure to logical) in subassignment type fix
# NOT RUN { +model <- sdts_train(tr_data, tr_label, w, verbose = 0) +predict <- sdts_predict(model, te_data, round(mean(w))) +sdts_score(predict, te_label, 1)
#> $f_score +#> [1] 0.125 +#> +#> $precision +#> [1] 0.06666667 +#> +#> $recall +#> [1] 1 +#>
# NOT RUN { windows <- c(110, 220, 330) model <- sdts_train(mp_test_data$train$data, mp_test_data$train$label, windows, verbose = 0) predict <- sdts_predict(model, mp_test_data$test$data, round(mean(windows))) diff --git a/docs/reference/sdts_score.html b/docs/reference/sdts_score.html index ba7e6cd..defc47d 100644 --- a/docs/reference/sdts_score.html +++ b/docs/reference/sdts_score.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -177,7 +177,17 @@

Examp tr_label <- mp_test_data$train$label[subs] te_data <- mp_test_data$test$data[subs] te_label <- mp_test_data$test$label[subs] -model <- sdts_train(tr_data, tr_label, w, verbose = 0)
#> Error in { work_len <- length(idx_work[[i]]) pro_muls <- matrix(Inf, matrix_profile_size, 1) pro_idxs <- matrix(-1, matrix_profile_size, 1) if (length(args) > 1) { pro_muls_right <- pro_muls_left <- NULL pro_idxs_right <- pro_idxs_left <- NULL } else { pro_muls_right <- pro_muls_left <- pro_muls pro_idxs_right <- pro_idxs_left <- pro_idxs } dist_pro <- matrix(0, matrix_profile_size, 1) last_product <- matrix(0, matrix_profile_size, 1) drop_value <- matrix(0, 1, 1) for (j in 1:work_len) { idx_st <- idx_work[[i]][1] idx_ed <- idx_work[[i]][work_len] idx <- idx_work[[i]][j] query_window <- as.matrix(query[idx:(idx + window_size - 1), 1]) if (j == 1) { nni <- dist_profile(data, query, nn, index = idx) dist_pro[, 1] <- nni$distance_profile last_product[, 1] <- nni$last_product } else { last_product[2:(data_size - window_size + 1), 1] <- last_product[1:(data_size - window_size), 1] - data[1:(data_size - window_size), 1] * drop_value + data[(window_size + 1):data_size, 1] * query_window[window_size, 1] last_product[1, 1] <- first_product[idx, 1] dist_pro <- 2 * (window_size - (last_product - window_size * nni$par$data_mean * nni$par$query_mean[idx])/(nni$par$data_sd * nni$par$query_sd[idx])) } dist_pro <- Re(sqrt(dist_pro)) drop_value <- query_window[1, 1] if (exclusion_zone > 0) { exc_st <- max(1, idx - exclusion_zone) exc_ed <- min(matrix_profile_size, idx + exclusion_zone) dist_pro[exc_st:exc_ed, 1] <- Inf } dist_pro[nni$par$data_sd < vars()$eps] <- Inf if (skip_location[idx] || any(nni$par$query_sd[idx] < vars()$eps)) { dist_pro[] <- Inf } dist_pro[skip_location] <- Inf if (length(args) == 1) { ind <- (dist_pro[idx:matrix_profile_size] < pro_muls_left[idx:matrix_profile_size]) ind <- c(rep(FALSE, (idx - 1)), ind) pro_muls_left[ind] <- dist_pro[ind] pro_idxs_left[which(ind)] <- idx ind <- (dist_pro[1:idx] < pro_muls_right[1:idx]) ind <- c(ind, rep(FALSE, matrix_profile_size - idx)) pro_muls_right[ind] <- dist_pro[ind] pro_idxs_right[which(ind)] <- idx } ind <- (dist_pro < pro_muls) pro_muls[ind] <- dist_pro[ind] pro_idxs[which(ind)] <- idx } res <- list(pro_muls = pro_muls, pro_idxs = pro_idxs, pro_muls_left = pro_muls_left, pro_idxs_left = pro_idxs_left, pro_muls_right = pro_muls_right, pro_idxs_right = pro_idxs_right) res}: task 2 failed - "NAs are not allowed in subscripted assignments"
predict <- sdts_predict(model, te_data, round(mean(w)))
#> Error in sdts_predict(model, te_data, round(mean(w))): object 'model' not found
sdts_score(predict, te_label, 1)
#> Error in pred_tmp[seq_len(length(pred))] <- pred: incompatible types (from closure to logical) in subassignment type fix
# NOT RUN { +model <- sdts_train(tr_data, tr_label, w, verbose = 0) +predict <- sdts_predict(model, te_data, round(mean(w))) +sdts_score(predict, te_label, 1)
#> $f_score +#> [1] 0.125 +#> +#> $precision +#> [1] 0.06666667 +#> +#> $recall +#> [1] 1 +#>
# NOT RUN { windows <- c(110, 220, 330) model <- sdts_train(mp_test_data$train$data, mp_test_data$train$label, windows) predict <- sdts_predict(model, mp_test_data$test$data, round(mean(windows))) diff --git a/docs/reference/sdts_train.html b/docs/reference/sdts_train.html index 29140a9..e048b45 100644 --- a/docs/reference/sdts_train.html +++ b/docs/reference/sdts_train.html @@ -69,7 +69,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -205,7 +205,17 @@

Examp tr_label <- mp_test_data$train$label[subs] te_data <- mp_test_data$test$data[subs] te_label <- mp_test_data$test$label[subs] -model <- sdts_train(tr_data, tr_label, w, verbose = 0)
#> Error in { work_len <- length(idx_work[[i]]) pro_muls <- matrix(Inf, matrix_profile_size, 1) pro_idxs <- matrix(-1, matrix_profile_size, 1) if (length(args) > 1) { pro_muls_right <- pro_muls_left <- NULL pro_idxs_right <- pro_idxs_left <- NULL } else { pro_muls_right <- pro_muls_left <- pro_muls pro_idxs_right <- pro_idxs_left <- pro_idxs } dist_pro <- matrix(0, matrix_profile_size, 1) last_product <- matrix(0, matrix_profile_size, 1) drop_value <- matrix(0, 1, 1) for (j in 1:work_len) { idx_st <- idx_work[[i]][1] idx_ed <- idx_work[[i]][work_len] idx <- idx_work[[i]][j] query_window <- as.matrix(query[idx:(idx + window_size - 1), 1]) if (j == 1) { nni <- dist_profile(data, query, nn, index = idx) dist_pro[, 1] <- nni$distance_profile last_product[, 1] <- nni$last_product } else { last_product[2:(data_size - window_size + 1), 1] <- last_product[1:(data_size - window_size), 1] - data[1:(data_size - window_size), 1] * drop_value + data[(window_size + 1):data_size, 1] * query_window[window_size, 1] last_product[1, 1] <- first_product[idx, 1] dist_pro <- 2 * (window_size - (last_product - window_size * nni$par$data_mean * nni$par$query_mean[idx])/(nni$par$data_sd * nni$par$query_sd[idx])) } dist_pro <- Re(sqrt(dist_pro)) drop_value <- query_window[1, 1] if (exclusion_zone > 0) { exc_st <- max(1, idx - exclusion_zone) exc_ed <- min(matrix_profile_size, idx + exclusion_zone) dist_pro[exc_st:exc_ed, 1] <- Inf } dist_pro[nni$par$data_sd < vars()$eps] <- Inf if (skip_location[idx] || any(nni$par$query_sd[idx] < vars()$eps)) { dist_pro[] <- Inf } dist_pro[skip_location] <- Inf if (length(args) == 1) { ind <- (dist_pro[idx:matrix_profile_size] < pro_muls_left[idx:matrix_profile_size]) ind <- c(rep(FALSE, (idx - 1)), ind) pro_muls_left[ind] <- dist_pro[ind] pro_idxs_left[which(ind)] <- idx ind <- (dist_pro[1:idx] < pro_muls_right[1:idx]) ind <- c(ind, rep(FALSE, matrix_profile_size - idx)) pro_muls_right[ind] <- dist_pro[ind] pro_idxs_right[which(ind)] <- idx } ind <- (dist_pro < pro_muls) pro_muls[ind] <- dist_pro[ind] pro_idxs[which(ind)] <- idx } res <- list(pro_muls = pro_muls, pro_idxs = pro_idxs, pro_muls_left = pro_muls_left, pro_idxs_left = pro_idxs_left, pro_muls_right = pro_muls_right, pro_idxs_right = pro_idxs_right) res}: task 2 failed - "NAs are not allowed in subscripted assignments"
predict <- sdts_predict(model, te_data, round(mean(w)))
#> Error in sdts_predict(model, te_data, round(mean(w))): object 'model' not found
sdts_score(predict, te_label, 1)
#> Error in pred_tmp[seq_len(length(pred))] <- pred: incompatible types (from closure to logical) in subassignment type fix
# NOT RUN { +model <- sdts_train(tr_data, tr_label, w, verbose = 0) +predict <- sdts_predict(model, te_data, round(mean(w))) +sdts_score(predict, te_label, 1)
#> $f_score +#> [1] 0.125 +#> +#> $precision +#> [1] 0.06666667 +#> +#> $recall +#> [1] 1 +#>
# NOT RUN { windows <- c(110, 220, 330) model <- sdts_train(mp_test_data$train$data, mp_test_data$train$label, windows) predict <- sdts_predict(model, mp_test_data$test$data, round(mean(windows))) diff --git a/docs/reference/set_data.html b/docs/reference/set_data.html index 9901ae1..40fc6b4 100644 --- a/docs/reference/set_data.html +++ b/docs/reference/set_data.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/simple_fast.html b/docs/reference/simple_fast.html index c433b38..97d0fe4 100644 --- a/docs/reference/simple_fast.html +++ b/docs/reference/simple_fast.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/stamp.html b/docs/reference/stamp.html index 1492857..d8472cf 100644 --- a/docs/reference/stamp.html +++ b/docs/reference/stamp.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -219,7 +219,7 @@

Examp
mp <- stamp(mp_toy_data$data[1:200, 1], window_size = 30, verbose = 0) # using threads -mp <- stamp_par(mp_toy_data$data[1:200, 1], window_size = 30, verbose = 0)
#> Error in left_matrix_profile[ind] <- batch[[i]]$dp[ind]: NAs are not allowed in subscripted assignments
# NOT RUN { +mp <- stamp_par(mp_toy_data$data[1:200, 1], window_size = 30, verbose = 0)# NOT RUN { ref_data <- mp_toy_data$data[, 1] query_data <- mp_toy_data$data[, 2] # self similarity diff --git a/docs/reference/stomp.html b/docs/reference/stomp.html index c11a3b7..2d976db 100644 --- a/docs/reference/stomp.html +++ b/docs/reference/stomp.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -202,7 +202,7 @@

Examp
mp <- stomp(mp_toy_data$data[1:200, 1], window_size = 30, verbose = 0) # using threads -mp <- stomp_par(mp_toy_data$data[1:400, 1], window_size = 30, verbose = 0)
#> Error in { work_len <- length(idx_work[[i]]) pro_muls <- matrix(Inf, matrix_profile_size, 1) pro_idxs <- matrix(-1, matrix_profile_size, 1) if (length(args) > 1) { pro_muls_right <- pro_muls_left <- NULL pro_idxs_right <- pro_idxs_left <- NULL } else { pro_muls_right <- pro_muls_left <- pro_muls pro_idxs_right <- pro_idxs_left <- pro_idxs } dist_pro <- matrix(0, matrix_profile_size, 1) last_product <- matrix(0, matrix_profile_size, 1) drop_value <- matrix(0, 1, 1) for (j in 1:work_len) { idx_st <- idx_work[[i]][1] idx_ed <- idx_work[[i]][work_len] idx <- idx_work[[i]][j] query_window <- as.matrix(query[idx:(idx + window_size - 1), 1]) if (j == 1) { nni <- dist_profile(data, query, nn, index = idx) dist_pro[, 1] <- nni$distance_profile last_product[, 1] <- nni$last_product } else { last_product[2:(data_size - window_size + 1), 1] <- last_product[1:(data_size - window_size), 1] - data[1:(data_size - window_size), 1] * drop_value + data[(window_size + 1):data_size, 1] * query_window[window_size, 1] last_product[1, 1] <- first_product[idx, 1] dist_pro <- 2 * (window_size - (last_product - window_size * nni$par$data_mean * nni$par$query_mean[idx])/(nni$par$data_sd * nni$par$query_sd[idx])) } dist_pro <- Re(sqrt(dist_pro)) drop_value <- query_window[1, 1] if (exclusion_zone > 0) { exc_st <- max(1, idx - exclusion_zone) exc_ed <- min(matrix_profile_size, idx + exclusion_zone) dist_pro[exc_st:exc_ed, 1] <- Inf } dist_pro[nni$par$data_sd < vars()$eps] <- Inf if (skip_location[idx] || any(nni$par$query_sd[idx] < vars()$eps)) { dist_pro[] <- Inf } dist_pro[skip_location] <- Inf if (length(args) == 1) { ind <- (dist_pro[idx:matrix_profile_size] < pro_muls_left[idx:matrix_profile_size]) ind <- c(rep(FALSE, (idx - 1)), ind) pro_muls_left[ind] <- dist_pro[ind] pro_idxs_left[which(ind)] <- idx ind <- (dist_pro[1:idx] < pro_muls_right[1:idx]) ind <- c(ind, rep(FALSE, matrix_profile_size - idx)) pro_muls_right[ind] <- dist_pro[ind] pro_idxs_right[which(ind)] <- idx } ind <- (dist_pro < pro_muls) pro_muls[ind] <- dist_pro[ind] pro_idxs[which(ind)] <- idx } res <- list(pro_muls = pro_muls, pro_idxs = pro_idxs, pro_muls_left = pro_muls_left, pro_idxs_left = pro_idxs_left, pro_muls_right = pro_muls_right, pro_idxs_right = pro_idxs_right) res}: task 1 failed - "NAs are not allowed in subscripted assignments"
# NOT RUN { +mp <- stomp_par(mp_toy_data$data[1:400, 1], window_size = 30, verbose = 0)# NOT RUN { ref_data <- mp_toy_data$data[, 1] query_data <- mp_toy_data$data[, 2] # self similarity diff --git a/docs/reference/stompi_update.html b/docs/reference/stompi_update.html new file mode 100644 index 0000000..c080f68 --- /dev/null +++ b/docs/reference/stompi_update.html @@ -0,0 +1,191 @@ + + + + + + + + +Real-time STOMP algorithm — stompi_update • tsmp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+
+ + +
+ +

Real-time STOMP algorithm

+ +
+ +
stompi_update(.mp, new_data, history_size = FALSE)
+ +

Arguments

+ + + + + + + + + + + + + + +
.mp

a TSMP object of class MatrixProfile.

new_data

new data to append to original data.

history_size

an int or FALSE. (Default is FALSE). Keep only this amount of data in +the object. The value is for the data, not the matrix profile. Notice that the lmpand lpi will +be inconsistent when repeatedly updating limiting the history size and thus will affect +the mp and pi.

+ +

Value

+ +

Returns the input .mp updated with the new information.

+ + +

Examples

+
mp <- tsmp(mp_toy_data$data[1:200, 1], window_size = 30, verbose = 0) +mpi <- stompi_update(mp, mp_toy_data$data[201:300, 1]) +mp <- tsmp(mp_toy_data$data[1:300, 1], window_size = 30, verbose = 0) +all.equal(mp, mpi, check.attributes = FALSE)
#> [1] TRUE
+
+ +
+ +
+ + +
+

Site built with pkgdown 1.3.0.

+
+
+
+ + + + + + diff --git a/docs/reference/tsmp-deprecated.html b/docs/reference/tsmp-deprecated.html index c1af687..03e6f2b 100644 --- a/docs/reference/tsmp-deprecated.html +++ b/docs/reference/tsmp-deprecated.html @@ -68,7 +68,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 diff --git a/docs/reference/tsmp.html b/docs/reference/tsmp.html index ace56e4..a3a3aa0 100644 --- a/docs/reference/tsmp.html +++ b/docs/reference/tsmp.html @@ -66,7 +66,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016 @@ -132,7 +132,7 @@

Computes the Matrix Profile and Profile Index

tsmp(..., window_size, exclusion_zone = 1/2, mode = c("stomp", "stamp",
   "simple", "mstomp", "scrimp", "valmod"), verbose = 2, n_workers = 1,
   s_size = Inf, must_dim = NULL, exc_dim = NULL, heap_size = 50,
-  .keep_data = TRUE)
+ paa = 1, .keep_data = TRUE)

Arguments

@@ -183,6 +183,10 @@

Arg

+ + + + @@ -279,7 +283,8 @@

Examp mp <- tsmp(mp_toy_data$data[1:200, 1], window_size = 30, verbose = 0) # parallel with [stomp_par()] -mp <- tsmp(mp_test_data$train$data[1:1000, 1], window_size = 30, n_workers = 2, verbose = 0)
#> Error in { work_len <- length(idx_work[[i]]) pro_muls <- matrix(Inf, matrix_profile_size, 1) pro_idxs <- matrix(-1, matrix_profile_size, 1) if (length(args) > 1) { pro_muls_right <- pro_muls_left <- NULL pro_idxs_right <- pro_idxs_left <- NULL } else { pro_muls_right <- pro_muls_left <- pro_muls pro_idxs_right <- pro_idxs_left <- pro_idxs } dist_pro <- matrix(0, matrix_profile_size, 1) last_product <- matrix(0, matrix_profile_size, 1) drop_value <- matrix(0, 1, 1) for (j in 1:work_len) { idx_st <- idx_work[[i]][1] idx_ed <- idx_work[[i]][work_len] idx <- idx_work[[i]][j] query_window <- as.matrix(query[idx:(idx + window_size - 1), 1]) if (j == 1) { nni <- dist_profile(data, query, nn, index = idx) dist_pro[, 1] <- nni$distance_profile last_product[, 1] <- nni$last_product } else { last_product[2:(data_size - window_size + 1), 1] <- last_product[1:(data_size - window_size), 1] - data[1:(data_size - window_size), 1] * drop_value + data[(window_size + 1):data_size, 1] * query_window[window_size, 1] last_product[1, 1] <- first_product[idx, 1] dist_pro <- 2 * (window_size - (last_product - window_size * nni$par$data_mean * nni$par$query_mean[idx])/(nni$par$data_sd * nni$par$query_sd[idx])) } dist_pro <- Re(sqrt(dist_pro)) drop_value <- query_window[1, 1] if (exclusion_zone > 0) { exc_st <- max(1, idx - exclusion_zone) exc_ed <- min(matrix_profile_size, idx + exclusion_zone) dist_pro[exc_st:exc_ed, 1] <- Inf } dist_pro[nni$par$data_sd < vars()$eps] <- Inf if (skip_location[idx] || any(nni$par$query_sd[idx] < vars()$eps)) { dist_pro[] <- Inf } dist_pro[skip_location] <- Inf if (length(args) == 1) { ind <- (dist_pro[idx:matrix_profile_size] < pro_muls_left[idx:matrix_profile_size]) ind <- c(rep(FALSE, (idx - 1)), ind) pro_muls_left[ind] <- dist_pro[ind] pro_idxs_left[which(ind)] <- idx ind <- (dist_pro[1:idx] < pro_muls_right[1:idx]) ind <- c(ind, rep(FALSE, matrix_profile_size - idx)) pro_muls_right[ind] <- dist_pro[ind] pro_idxs_right[which(ind)] <- idx } ind <- (dist_pro < pro_muls) pro_muls[ind] <- dist_pro[ind] pro_idxs[which(ind)] <- idx } res <- list(pro_muls = pro_muls, pro_idxs = pro_idxs, pro_muls_left = pro_muls_left, pro_idxs_left = pro_idxs_left, pro_muls_right = pro_muls_right, pro_idxs_right = pro_idxs_right) res}: task 1 failed - "NAs are not allowed in subscripted assignments"
+mp <- tsmp(mp_test_data$train$data[1:1000, 1], window_size = 30, n_workers = 2, verbose = 0) + # Anytime STAMP mp <- tsmp(mp_toy_data$data[1:200, 1], window_size = 30, mode = "stamp", s_size = 50, verbose = 0) diff --git a/docs/reference/valmod.html b/docs/reference/valmod.html index a7da92a..85664bc 100644 --- a/docs/reference/valmod.html +++ b/docs/reference/valmod.html @@ -65,7 +65,7 @@ tsmp - 0.3.4.9005 + 0.3.5.9016
@@ -198,7 +198,7 @@

See a

Examples

-
mp <- valmod(mp_toy_data$data[1:200, 1], window_min = 30, window_max = 40)
#> max_number_motifs_found 133
#> min_number_motifs_found 2
#> Finished in 0.12 secs
# NOT RUN { +
mp <- valmod(mp_toy_data$data[1:200, 1], window_min = 30, window_max = 40)
#> max_number_motifs_found 133
#> min_number_motifs_found 2
#> Finished in 0.15 secs
# NOT RUN { ref_data <- mp_toy_data$data[, 1] query_data <- mp_toy_data$data[, 2] # self similarity diff --git a/inst/WORDLIST b/inst/WORDLIST index b779f21..b1a3b5c 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -65,6 +65,7 @@ MatrixProfile MDL MDS MOTIFs +MPdist mSTAMP mSTOMP MSTOMP diff --git a/man/dist_profile.Rd b/man/dist_profile.Rd index 7173ded..6fbff9b 100644 --- a/man/dist_profile.Rd +++ b/man/dist_profile.Rd @@ -72,7 +72,8 @@ for (i in seq_len(10)) { # weighted weight <- c(rep(1, w / 3), rep(0.5, w / 3), rep(0.8, w / 3)) # just an example -nn <- dist_profile(ref_data, ref_data, window_size = w, index = 1, method = "weighted", weight = weight) +nn <- dist_profile(ref_data, ref_data, window_size = w, index = 1, method = "weighted", + weight = weight) distance_profile <- Re(sqrt(nn$distance_profile)) } \references{ diff --git a/man/mass-deprecated.Rd b/man/mass-deprecated.Rd index e3b1f96..2de3da8 100644 --- a/man/mass-deprecated.Rd +++ b/man/mass-deprecated.Rd @@ -4,7 +4,8 @@ \alias{mass-deprecated} \title{Calculates the distance profile using MASS_V2 algorithm} \usage{ -mass(data_fft, query_window, data_size, window_size, data_mean, data_sd, query_mean, query_sd) +mass(data_fft, query_window, data_size, window_size, data_mean, data_sd, + query_mean, query_sd) } \arguments{ \item{data_fft}{precomputed data product.} diff --git a/man/mass_pre_w.Rd b/man/mass_pre_w.Rd index c1905da..0eda570 100644 --- a/man/mass_pre_w.Rd +++ b/man/mass_pre_w.Rd @@ -25,7 +25,8 @@ Precomputes several values used on MASS w <- mp_toy_data$sub_len ref_data <- mp_toy_data$data[, 1] query_data <- mp_toy_data$data[, 1] -weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), rep(1, mp_toy_data$sub_len / 3)) +weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), +rep(1, mp_toy_data$sub_len / 3)) pre <- tsmp:::mass_pre_w(ref_data, query_data, w, weight) diff --git a/man/mass_weighted.Rd b/man/mass_weighted.Rd index 01f48d0..711ece9 100644 --- a/man/mass_weighted.Rd +++ b/man/mass_weighted.Rd @@ -38,7 +38,8 @@ Series Subsequences under Euclidean Distance and Correlation Coefficient. w <- mp_toy_data$sub_len ref_data <- mp_toy_data$data[, 1] query_data <- mp_toy_data$data[, 1] -weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), rep(1, mp_toy_data$sub_len / 3)) +weight <- c(rep(1, mp_toy_data$sub_len / 3), rep(0.5, mp_toy_data$sub_len / 3), + rep(1, mp_toy_data$sub_len / 3)) pre <- tsmp:::mass_pre_w(ref_data, query_data, w, weight) diff --git a/man/plot_arcs.Rd b/man/plot_arcs.Rd index 0d09a04..5488d8e 100644 --- a/man/plot_arcs.Rd +++ b/man/plot_arcs.Rd @@ -27,6 +27,10 @@ arc, respectively. Accepts one color.} \item{xlab}{a \code{string}. (Default is \code{"Profile Index"}). X label.} +\item{xmin}{an \code{int}. (Default is \code{NULL}). Set the minimum value of x axis.} + +\item{xmax}{an \code{int}. (Default is \code{NULL}). Set the maximum value of x axis.} + \item{...}{further arguments to be passed to \code{\link[=plot]{plot()}}. See \code{\link[=par]{par()}}.} } \value{ diff --git a/man/tsmp.Rd b/man/tsmp.Rd index d27a10f..df25e75 100644 --- a/man/tsmp.Rd +++ b/man/tsmp.Rd @@ -36,6 +36,8 @@ details.} \item{heap_size}{an \code{int}. (Default is \code{50}). Size of the distance profile heap buffer.} +\item{paa}{an \code{int}. (Default is \code{1}). Factor of PAA reduction (2 == half of size)} + \item{.keep_data}{a \code{logical}. (Default is \code{TRUE}). Keeps the data embedded to resultant object.} } \value{ diff --git a/tests/testthat/test-subset.R b/tests/testthat/test-subset.R index 400c2d2..3bc3ef3 100644 --- a/tests/testthat/test-subset.R +++ b/tests/testthat/test-subset.R @@ -6,7 +6,7 @@ if (skip_on_cran()) { w <- mp_fluss_data$tilt_abp$window nseg <- 1 offset <- 4000 - test_mp <- tsmp(data, window_size = w, n_workers = 6) + test_mp <- tsmp(data, window_size = w, n_workers = 2) cac <- fluss_cac(test_mp) segments <- fluss_extract(cac, nseg) @@ -27,13 +27,13 @@ if (skip_on_cran()) { }) test_that("Head Chain", { - h_chain <- head(chain, 8000) + h_chain <- utils::head(chain, 8000) expect_equal(sum(h_chain$chain$best), 39574) expect_equal(length(h_chain$chain$best), 6) }) test_that("Tail Chain", { - t_chain <- tail(chain, 4000) + t_chain <- utils::tail(chain, 4000) expect_equal(sum(t_chain$chain$best), 14625) expect_equal(length(t_chain$chain$best), 9) }) @@ -46,7 +46,7 @@ if (skip_on_cran()) { }) test_that("Head Arc Count", { - h_cac <- head(cac, offset) + h_cac <- utils::head(cac, offset) expect_equal(round(mean(h_cac$cac), 4), 0.7198) expect_equal(round(sd(h_cac$cac), 3), 0.316) expect_equal(round(min(h_cac$cac), 3), 0.209) @@ -54,7 +54,7 @@ if (skip_on_cran()) { }) test_that("Tail Arc Count", { - t_cac <- tail(cac, offset) + t_cac <- utils::tail(cac, offset) expect_equal(round(mean(t_cac$cac), 4), 0.7654) expect_equal(round(sd(t_cac$cac), 3), 0.273) expect_equal(round(min(t_cac$cac), 3), 0.255) @@ -66,12 +66,12 @@ if (skip_on_cran()) { }) test_that("Head Segments found", { - h_segment <- head(segments, offset) + h_segment <- utils::head(segments, offset) expect_equal(h_segment$fluss, 1228) }) test_that("Tail Segments found", { - t_segment <- tail(segments, offset) + t_segment <- utils::tail(segments, offset) expect_equal(t_segment$fluss, 1643) }) }
heap_size

an int. (Default is 50). Size of the distance profile heap buffer.

paa

an int. (Default is 1). Factor of PAA reduction (2 == half of size)

.keep_data

a logical. (Default is TRUE). Keeps the data embedded to resultant object.