Skip to content

evprof

Electric Vehicle Charging Sessions Profiling and Modelling

v1.2.0 · Dec 23, 2025 · GPL-3

Description

Tools for modelling electric vehicle charging sessions into generic groups with similar connection patterns called "user profiles", using Gaussian Mixture Models clustering. The clustering and profiling methodology is described in Cañigueral and Meléndez (2021, ISBN:0142-0615) <doi:10.1016/j.ijepes.2021.107195>.

Downloads

577

Last 30 days

6562nd

577

Last 90 days

577

Last year

CRAN Check Status

2 ERROR
12 OK
Show all 14 flavors
Flavor Status
r-devel-linux-x86_64-debian-clang OK
r-devel-linux-x86_64-debian-gcc ERROR
r-devel-linux-x86_64-fedora-clang OK
r-devel-linux-x86_64-fedora-gcc OK
r-devel-macos-arm64 OK
r-devel-windows-x86_64 OK
r-oldrel-macos-arm64 OK
r-oldrel-macos-x86_64 OK
r-oldrel-windows-x86_64 OK
r-patched-linux-x86_64 OK
r-release-linux-x86_64 ERROR
r-release-macos-arm64 OK
r-release-macos-x86_64 OK
r-release-windows-x86_64 OK
Check details (16 non-OK)
OK r-devel-linux-x86_64-debian-clang

*


            
ERROR r-devel-linux-x86_64-debian-gcc

examples

Running examples in ‘evprof-Ex.R’ failed
The error most likely occurred in:

> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: cluster_sessions
> ### Title: Cluster sessions with 'mclust' package
> ### Aliases: cluster_sessions
> 
> ### ** Examples
> 
> library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

> 
> # Select working day sessions (`Timecycle == 1`) that
> # disconnect the same day (`Disconnection == 1`)
> sessions_day <- california_ev_sessions %>%
+   divide_by_timecycle(
+     months_cycles = list(1:12), # Not differentiation between months
+     wdays_cycles = list(1:5, 6:7) # Differentiation between workdays/weekends
+   ) %>%
+   divide_by_disconnection(
+     division_hour = 10, start = 3
+   ) %>%
+   filter(
+     Disconnection == 1, Timecycle == 1
+   ) %>%
+   sample_frac(0.05)
The considered time-cycles are:


|Timecycle |months |wdays |
|:---------|:------|:-----|
|1         |1-12   |1-5   |
|2         |1-12   |6-7   |
Error in NextMethod(.Generic) : 
  NAs are not allowed in subscripted assignments
Calls: %>% ... convert_time_dt_to_plot_dt -> [<- -> [<-.Date -> .Date -> NextMethod
Execution halted
ERROR r-devel-linux-x86_64-debian-gcc

tests

  Running ‘spelling.R’ [0s/0s]
  Running ‘testthat.R’ [15s/19s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > # This file is part of the standard setup for testthat.
  > # It is recommended that you do not modify it.
  > #
  > # Where should you do additional test configuration?
  > # Learn more about the roles of various files in:
  > # * https://r-pkgs.org/tests.html
  > # * https://testthat.r-lib.org/reference/test_package.html#special-files
  > 
  > library(testthat)
  > library(evprof)
  > 
  > test_check("evprof")
  Saving _problems/test-exploration-36.R
  Saving _problems/test-exploration-45.R
  Saving _problems/test-exploration-66.R
  Saving _problems/test-preprocessing-17.R
  Saving _problems/test-preprocessing-36.R
  Trying with MinPts = 200 and eps = 0.66
  Too much nosie (4 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 0.99
  Solution found: MinPts= 200 , eps = 0.99
  Trying with MinPts = 200 and eps = 3.3
  Too much nosie (18 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 4.95
  Solution found: MinPts= 200 , eps = 4.95
  Trying with MinPts = 200 and eps = 0.66
  Too much nosie (4 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 0.99
  Solution found: MinPts= 200 , eps = 0.99
  Trying with MinPts = 200 and eps = 0.66
  Too much nosie (4 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 0.99
  Solution found: MinPts= 200 , eps = 0.99
  The considered time-cycles are:
  
  
  |Timecycle |months |wdays |
  |:---------|:------|:-----|
  |1         |1-12   |1-5   |
  |2         |1-12   |6-7   |
  [ FAIL 5 | WARN 0 | SKIP 4 | PASS 34 ]
  
  ══ Skipped tests (4) ═══════════════════════════════════════════════════════════
  • On CRAN (4): 'test-clustering.R:16:3', 'test-clustering.R:26:3',
    'test-modelling.R:104:3', 'test-modelling.R:135:3'
  
  ══ Failed tests ════════════════════════════════════════════════════════════════
  ── Error ('test-exploration.R:34:3'): Points plot ──────────────────────────────
  Error in `NextMethod(.Generic)`: NAs are not allowed in subscripted assignments
  Backtrace:
       ▆
    1. ├─testthat::expect_true(...) at test-exploration.R:34:3
    2. │ └─testthat::quasi_label(enquo(object), label)
    3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
    4. ├─ggplot2::is_ggplot(plot_points(sessions, log = FALSE))
    5. │ └─S7::S7_inherits(x, class_ggplot)
    6. └─evprof::plot_points(sessions, log = FALSE)
    7.   └─evprof:::convert_time_dt_to_plot_dt(...)
    8.     ├─base::`[<-`(`*tmp*`, next_day_idx, value = `<date>`)
    9.     ├─base::`[<-.Date`(`*tmp*`, next_day_idx, value = `<date>`)
   10.     │ └─base::.Date(NextMethod(.Generic), oldClass(x))
   11.     └─base::NextMethod(.Generic)
  ── Error ('test-exploration.R:43:3'): Density 2D plots ─────────────────────────
  Error in `NextMethod(.Generic)`: NAs are not allowed in subscripted assignments
  Backtrace:
       ▆
    1. ├─testthat::expect_true(...) at test-exploration.R:43:3
    2. │ └─testthat::quasi_label(enquo(object), label)
    3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
    4. ├─ggplot2::is_ggplot(plot_density_2D(sessions, by = "wday", log = FALSE))
    5. │ └─S7::S7_inherits(x, class_ggplot)
    6. └─evprof::plot_density_2D(sessions, by = "wday", log = FALSE)
    7.   └─evprof:::convert_time_dt_to_plot_dt(...)
    8.     ├─base::`[<-`(`*tmp*`, next_day_idx, value = `<date>`)
    9.     ├─base::`[<-.Date`(`*tmp*`, next_day_idx, value = `<date>`)
   10.     │ └─base::.Date(NextMethod(.Generic), oldClass(x))
   11.     └─base::NextMethod(.Generic)
  ── Error ('test-exploration.R:64:3'): Density 3D plots ─────────────────────────
  Error in `NextMethod(.Generic)`: NAs are not allowed in subscripted assignments
  Backtrace:
       ▆
    1. ├─testthat::expect_true(...) at test-exploration.R:64:3
    2. │ └─testthat::quasi_label(enquo(object), label)
    3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
    4. ├─"plotly" %in% class(plot_density_3D(sessions, log = FALSE))
    5. └─evprof::plot_density_3D(sessions, log = FALSE)
    6.   └─evprof:::convert_time_dt_to_plot_num(...)
    7.     └─evprof:::convert_time_dt_to_plot_dt(time_dt, start)
    8.       ├─base::`[<-`(`*tmp*`, next_day_idx, value = `<date>`)
    9.       ├─base::`[<-.Date`(`*tmp*`, next_day_idx, value = `<date>`)
   10.       │ └─base::.Date(NextMethod(.Generic), oldClass(x))
   11.       └─base::NextMethod(.Generic)
  ── Error ('test-preprocessing.R:17:3'): The outliers are removed by cutting ────
  Error in `NextMethod(.Generic)`: NAs are not allowed in subscripted assignments
  Backtrace:
      ▆
   1. └─evprof::cut_sessions(sessions, connection_start_max = 24, log = FALSE) at test-preprocessing.R:17:3
   2.   └─evprof:::convert_time_dt_to_plot_num(...)
   3.     └─evprof:::convert_time_dt_to_plot_dt(time_dt, start)
   4.       ├─base::`[<-`(`*tmp*`, next_day_idx, value = `<date>`)
   5.       ├─base::`[<-.Date`(`*tmp*`, next_day_idx, value = `<date>`)
   6.       │ └─base::.Date(NextMethod(.Generic), oldClass(x))
   7.       └─base::NextMethod(.Generic)
  ── Error ('test-preprocessing.R:34:3'): kNN plots ──────────────────────────────
  Error in `NextMethod(.Generic)`: NAs are not allowed in subscripted assignments
  Backtrace:
       ▆
    1. ├─testthat::expect_true(...) at test-preprocessing.R:34:3
    2. │ └─testthat::quasi_label(enquo(object), label)
    3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
    4. ├─ggplot2::is_ggplot(plot_kNNdist(sessions, log = FALSE))
    5. │ └─S7::S7_inherits(x, class_ggplot)
    6. └─evprof::plot_kNNdist(sessions, log = FALSE)
    7.   └─evprof:::convert_time_dt_to_plot_num(...)
    8.     └─evprof:::convert_time_dt_to_plot_dt(time_dt, start)
    9.       ├─base::`[<-`(`*tmp*`, next_day_idx, value = `<date>`)
   10.       ├─base::`[<-.Date`(`*tmp*`, next_day_idx, value = `<date>`)
   11.       │ └─base::.Date(NextMethod(.Generic), oldClass(x))
   12.       └─base::NextMethod(.Generic)
  
  [ FAIL 5 | WARN 0 | SKIP 4 | PASS 34 ]
  Error:
  ! Test failures.
  Execution halted
OK r-devel-linux-x86_64-fedora-clang

*


            
OK r-devel-linux-x86_64-fedora-gcc

*


            
OK r-devel-macos-arm64

*


            
OK r-devel-windows-x86_64

*


            
OK r-oldrel-macos-arm64

*


            
OK r-oldrel-macos-x86_64

*


            
OK r-oldrel-windows-x86_64

*


            
OK r-patched-linux-x86_64

*


            
ERROR r-release-linux-x86_64

examples

Running examples in ‘evprof-Ex.R’ failed
The error most likely occurred in:

> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: cut_sessions
> ### Title: Cut outliers based on minimum and maximum limits of
> ###   ConnectionHours and ConnectionStartDateTime variables
> ### Aliases: cut_sessions
> 
> ### ** Examples
> 
> library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

> # Localize the outlying sessions above a certain threshold
> california_ev_sessions %>%
+   sample_frac(0.05) %>%
+   plot_points(start = 3)
Warning: Removed 3 rows containing missing values or values outside the scale range
(`geom_point()`).
> 
> # For example sessions that start before 5 AM or that are
> # longer than 20 hours are considered outliers
> sessions_clean <- california_ev_sessions %>%
+   sample_frac(0.05) %>%
+   cut_sessions(
+     start = 3,
+     connection_hours_max = 20,
+     connection_start_min = 5
+   )
> plot_points(sessions_clean, start = 3)
Error in if (any(hour(time_dt) < start)) { : 
  missing value where TRUE/FALSE needed
Calls: plot_points -> convert_time_dt_to_plot_dt
Execution halted
ERROR r-release-linux-x86_64

tests

  Running ‘spelling.R’ [0s/0s]
  Running ‘testthat.R’ [25s/31s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > # This file is part of the standard setup for testthat.
  > # It is recommended that you do not modify it.
  > #
  > # Where should you do additional test configuration?
  > # Learn more about the roles of various files in:
  > # * https://r-pkgs.org/tests.html
  > # * https://testthat.r-lib.org/reference/test_package.html#special-files
  > 
  > library(testthat)
  > library(evprof)
  > 
  > test_check("evprof")
  Saving _problems/test-preprocessing-36.R
  Trying with MinPts = 200 and eps = 0.66
  Too much nosie (4 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 0.99
  Solution found: MinPts= 200 , eps = 0.99
  Trying with MinPts = 200 and eps = 3.3
  Too much nosie (18 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 4.95
  Solution found: MinPts= 200 , eps = 4.95
  Trying with MinPts = 200 and eps = 0.66
  Too much nosie (4 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 0.99
  Solution found: MinPts= 200 , eps = 0.99
  Trying with MinPts = 200 and eps = 0.66
  Too much nosie (4 %). Consider a higher eps.
  Trying with MinPts = 200 and eps = 0.99
  Solution found: MinPts= 200 , eps = 0.99
  The considered time-cycles are:
  
  
  |Timecycle |months |wdays |
  |:---------|:------|:-----|
  |1         |1-12   |1-5   |
  |2         |1-12   |6-7   |
  [ FAIL 1 | WARN 0 | SKIP 4 | PASS 48 ]
  
  ══ Skipped tests (4) ═══════════════════════════════════════════════════════════
  • On CRAN (4): 'test-clustering.R:16:3', 'test-clustering.R:26:3',
    'test-modelling.R:104:3', 'test-modelling.R:135:3'
  
  ══ Failed tests ════════════════════════════════════════════════════════════════
  ── Error ('test-preprocessing.R:34:3'): kNN plots ──────────────────────────────
  Error in `kNN(x, k, sort = TRUE, ...)`: data/distances cannot contain NAs for kNN (with kd-tree)!
  Backtrace:
       ▆
    1. ├─testthat::expect_true(...) at test-preprocessing.R:34:3
    2. │ └─testthat::quasi_label(enquo(object), label)
    3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
    4. ├─ggplot2::is_ggplot(plot_kNNdist(sessions, log = FALSE))
    5. │ └─S7::S7_inherits(x, class_ggplot)
    6. ├─evprof::plot_kNNdist(sessions, log = FALSE)
    7. │ ├─ggplot2::ggplot(...)
    8. │ └─tibble::tibble(...)
    9. │   └─tibble:::tibble_quos(xs, .rows, .name_repair)
   10. │     └─rlang::eval_tidy(xs[[j]], mask)
   11. ├─base::sort(...)
   12. └─dbscan::kNNdist(...)
   13.   └─dbscan::kNN(x, k, sort = TRUE, ...)
  
  [ FAIL 1 | WARN 0 | SKIP 4 | PASS 48 ]
  Error:
  ! Test failures.
  Execution halted
OK r-release-macos-arm64

*


            
OK r-release-macos-x86_64

*


            
OK r-release-windows-x86_64

*


            

Check History

ERROR 12 OK · 0 NOTE · 0 WARNING · 2 ERROR · 0 FAILURE Mar 9, 2026
ERROR r-devel-linux-x86_64-debian-gcc

examples

Running examples in ‘evprof-Ex.R’ failed
The error most likely occurred in:

> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: cluster_sessions
> ### Title: Cluster sessions with 'mclust' package
> ### Aliases: cluster_sessions
> 
> ### ** Examples
> 
> library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

> 
> # Select
ERROR r-release-linux-x86_64

examples

Running examples in ‘evprof-Ex.R’ failed
The error most likely occurred in:

> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: cut_sessions
> ### Title: Cut outliers based on minimum and maximum limits of
> ###   ConnectionHours and ConnectionStartDateTime variables
> ### Aliases: cut_sessions
> 
> ### ** Examples
> 
> library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘pac

Dependency Network

Dependencies Reverse dependencies cowplot dbscan dplyr ggplot2 jsonlite lubridate MASS mclust plotly purrr rlang tibble tidyr evprof

Version History

new 1.2.0 Mar 9, 2026