Skip to content

Commit

Permalink
mm_dependence
Browse files Browse the repository at this point in the history
  • Loading branch information
stangandaho committed Dec 26, 2024
1 parent 7979c78 commit ada7ebc
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 115 deletions.
5 changes: 2 additions & 3 deletions .github/workflows/R-CMD-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,8 @@ jobs:
matrix:
config:
- {os: windows-latest, r: 'release'}
#- {os: macOS-latest, r: 'release'}
#- {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
#- {os: ubuntu-20.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: macOS-latest, r: 'release'}
- {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}

env:
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
Expand Down
5 changes: 4 additions & 1 deletion R/mm_create_hs.R
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@
#' # Get Hierarchical Subject from the image - Before use mm_create_hs()
#' mm_get_hs(path = image_path) #==> "Species|Vulture"
#'
mm_create_hs <- function(path, value = c(), intern = TRUE, quiet = TRUE, ...) {
mm_create_hs <- function(path,
value = c(),
intern = TRUE,
quiet = TRUE, ...) {

if (is.null(value)) {
stop("Value must be provided, e.g c('Species' = 'Vulture')")
Expand Down
16 changes: 8 additions & 8 deletions R/mm_independence.R
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,8 @@
#' df <- data.frame(datetime = as.POSIXct(c("2024-08-01 10:00:00", "2024-08-01 10:15:00",
#' "2024-08-01 10:45:00", "2024-08-01 11:00:00")),
#' value = c(1, 2, 3, 4))
#' result <- mm_is_independent(data = df, datetime = "datetime", format = "%Y-%m-%d %H:%M:%S")
#'
#' # Example with deltatime
#' deltatime <- c(1800, 1800, 3600)
#' result <- mm_is_independent(deltatime = deltatime)
#' result <- mm_independence(data = df, datetime = "datetime", format = "%Y-%m-%d %H:%M:%S")
#' result
#'
#' @export

Expand All @@ -54,7 +51,7 @@ mm_independence <- function(data = NULL,
stop("Wrong data provided")
}

dt_str_ <- paste0(dplyr::ensym(datetime))
dt_str_ <- ifelse(hasArg(datetime), paste0(dplyr::ensym(datetime)), "datetime")

if (!any(dt_str_ %in% colnames(data))) {
stop(sprintf("%s not found in data", dt_str_))
Expand All @@ -71,6 +68,7 @@ mm_independence <- function(data = NULL,

## Get datetime and build new data
if (hasArg(data)) {
original_datetime <- data[[dt_str_]]
dt_str_ <- paste0(dplyr::ensym(datetime))
data[[dt_str_]] <- strptime(data[[dplyr::ensym(datetime)]], format = format)
data <- data %>%
Expand All @@ -79,6 +77,7 @@ mm_independence <- function(data = NULL,
dplyr::as_tibble()

}else{
original_datetime <- datetime
data <- dplyr::tibble('datetime' := strptime(datetime, format = format)) %>%
dplyr::arrange(datetime)
}
Expand All @@ -91,8 +90,9 @@ mm_independence <- function(data = NULL,
# warning for ambiguous datetime
if (!all(is.na(data$datetime))) {
if (any(is.na(data$datetime))) {
na_date <- data$datetime[is.na(data$datetime)]
warning(sprintf("The following datetime are ambiguous: %s", paste0(na_date, collapse = " ")))
na_date <- original_datetime[is.na(data$datetime)]
warning(sprintf("The following datetime are ambiguous: %s", paste0(na_date, collapse = ", ")),
call. = FALSE)
}
}

Expand Down
7 changes: 2 additions & 5 deletions man/mm_independence.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tests/testthat/test-mm_create_hs.R
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ test_that("Create hierarchical subject in metadata", {
image_path <- file.path(system.file("img", package = "maimer"), "large.jpeg")

null_output <- mm_create_hs(path = image_path, value = c("Species" = "Vulture"))
testthat::expect_equal(null_output, "1 image files updated")
testthat::expect_equal(class(null_output), "noquote")

# Complet HS to existing
null_output2 <- mm_create_hs(path = image_path, value = c("Species" = "Vulture", "Sex" = "Female"))
Expand Down
61 changes: 21 additions & 40 deletions tests/testthat/test-mm_is_independent.R
Original file line number Diff line number Diff line change
@@ -1,92 +1,73 @@
library(testthat)
library(dplyr)

# Example function definition here, assuming it's available as mm_is_independent
# Example function definition here, assuming it's available as mm_independence

test_that("mm_is_independent handles data.frame input correctly", {
test_that("mm_independence handles data.frame input correctly", {
# Test data
df <- data.frame(datetime = as.POSIXct(c("2024-08-01 10:00:00", "2024-08-01 10:15:00",
"2024-08-01 10:45:00", "2024-08-01 11:00:00")))

# Test with threshold of 15 minutes (900 seconds)
result <- mm_is_independent(data = df, datetime = "datetime", format = "%Y-%m-%d %H:%M:%S", threshold = 900)
result <- mm_independence(data = df, datetime = "datetime", format = "%Y-%m-%d %H:%M:%S", threshold = 900)

expect_equal(result, NULL)
expect_contains(class(result), "tbl_df")
})

test_that("mm_is_independent returns only independent events when 'only' is TRUE", {
test_that("mm_independence returns only independent events when 'only' is TRUE", {
# Test data
df <- data.frame(datetime = as.POSIXct(c("2024-08-01 10:00:00", "2024-08-01 10:15:00",
"2024-08-01 10:45:00", "2024-08-01 11:00:00")))

result <- mm_is_independent(data = df, datetime = "datetime",
result <- mm_independence(data = df, datetime = "datetime",
format = "%Y-%m-%d %H:%M:%S", threshold = 10, only = TRUE)

expect_true(all(class(result) %in% c("data.frame", "tbl_df", "tbl")))
})

test_that("mm_is_independent handles deltatime input correctly", {
# Test deltatime vector
deltatime <- c(900, 900, 1800, 600)

result <- mm_is_independent(deltatime = deltatime, threshold = 900)
expected <- data.frame(deltatime = deltatime, independent = c(TRUE, TRUE, TRUE, FALSE))

expect_equal(result, as_tibble(expected))
})
test_that("mm_independence handles missing datetime and format with data", {
# Test data
df <- data.frame(datetime = as.POSIXct(c("2024-08-01 10:00:00", "2024-08-01 10:15:00",
"2024-08-01 10:45:00", "2024-08-01 11:00:00")))

test_that("mm_is_independent handles missing datetime and format with data", {
expect_error(mm_is_independent(data = df), "`datetime`, cannot be missed")
expect_error(mm_is_independent(data = df, datetime = "datetime"), "`format` cannot be missed")
expect_error(mm_independence(data = df), "datetime must be provided")
expect_error(mm_independence(data = df, datetime = "datetime"), "format cannot be missed")
})

test_that("mm_is_independent handles ambiguous datetime formats", {
test_that("mm_independence handles ambiguous datetime formats", {
df <- data.frame(datetime = c("2024-08-01 10:00:00", "2024-08-01 10:15:00", "unknown datetime"),
value = c(1, 2, 3))

expect_warning(mm_is_independent(data = df, datetime = "datetime", format = "%Y-%m-%d %H:%M:%S"),
expect_warning(mm_independence(data = df, datetime = "datetime", format = "%Y-%m-%d %H:%M:%S"),
"The following datetime are ambiguous: unknown datetime")
})

test_that("mm_is_independent returns all rows when 'only' is FALSE", {
test_that("mm_independence returns all rows when 'only' is FALSE", {
# Test data
df <- data.frame(datetime = as.POSIXct(c("2024-08-01 10:00:00", "2024-08-01 10:15:00",
"2024-08-01 10:45:00", "2024-08-01 11:00:00")),
value = c(1, 2, 3, 4))

result <- mm_is_independent(data = df, datetime = "datetime",
result <- mm_independence(data = df, datetime = "datetime",
format = "%Y-%m-%d %H:%M:%S", threshold = 20, only = FALSE)
expected <- df %>%
mutate(independent = c(FALSE, TRUE, TRUE, FALSE),
deltatime = c(0, 15, 30, 15))

expect_equal(result, as_tibble(expected))
expect_equal(nrow(result), nrow(df))
})


test_that("mm_is_independent returns correct message when no independent events found", {
df <- data.frame(datetime = as.POSIXct(c("2024-08-01 10:00:00", "2024-08-01 10:15:00",
"2024-08-01 10:30:00")),
value = c(1, 2, 3))

expect_message(mm_is_independent(data = df, datetime = "datetime",
format = "%Y-%m-%d %H:%M:%S", threshold = 3600),
"Any independent event found with threshold of 3600")
})

test_that("mm_is_independent handles empty data.frame correctly", {
test_that("mm_independence handles empty data.frame correctly", {
df <- data.frame(datetime = as.POSIXct(character(0)), value = numeric(0))

expect_error(mm_is_independent(data = df, datetime = "datetime",
expect_error(mm_independence(data = df, datetime = "datetime",
format = "%Y-%m-%d %H:%M:%S"))
})

test_that("mm_is_independent ambiguous date", {
test_that("mm_independence ambiguous date", {
df <- data.frame(datetime = c("202408-01 10:00:00", "2024-08-01 10:15:00",
"2024-08-01 10:30:00"),
value = c(1, 2, 3))

expect_warning(mm_is_independent(data = df, datetime = "datetime",
expect_warning(mm_independence(data = df, datetime = "datetime",
format = "%Y-%m-%d %H:%M:%S", threshold = 10))

})
57 changes: 0 additions & 57 deletions tests/testthat/test-mm_to_diel.R

This file was deleted.

0 comments on commit ada7ebc

Please sign in to comment.