tests/testthat/test-statistical.R

### Tests of the functions in the tab "Statistical"
### https://echarts4r.john-coene.com/articles/stats.html


test_that("e_band plot has the good data structure and type", {
  set.seed(1)

  df <- data.frame(
    x = 1:5,
    y = round(runif(5, 5, 10), 6)
  ) |>
    dplyr::mutate(
      lwr = round(y - runif(5, 1, 3), 6),
      upr = y + round(runif(5, 2, 4), 6)
    )

  plot <- df |>
    e_charts(x) |>
    e_line(y) |>
    e_band(lwr, upr)

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  expect_equal(
    plot$x$opts$series[[1]]$data,
    list(
      list(value = c(1.000000, 6.327543)),
      list(value = c(2.000000, 6.860619)),
      list(value = c(3.000000, 7.864267)),
      list(value = c(4.000000, 9.541039)),
      list(value = c(5.00000, 6.00841))
    )
  )
  expect_equal(
    plot$x$opts$series[[1]]$type,
    "line"
  )
})

test_that("e_band2 plot has good data structure and type", {
  df <- data.frame(x = seq(3), y = c(1, 3, 9), w = c(3, 4, 3))
  plot <- df |>
    e_charts(x) |>
    e_band2(y, w)

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  expect_equal(
    plot$x$opts$series[[1]]$renderItem,
    htmlwidgets::JS("renderBand")
  )
  expect_equal(
    plot$x$opts$series[[1]]$data[[2]]$value,
    c(2, 3, 4)
  )
})

test_that("e_correlations plot has the good data structure and type", {
  plot <- cor(mtcars[6:9, 1:3]) |>
    round(7) |>
    e_charts() |>
    e_correlations(order = "hclust") |>
    e_tooltip()

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  expect_equal(
    plot$x$opts$series[[1]]$data,
    list(
      list(value = c("mpg", "mpg", " 1.0000000")),
      list(value = c("cyl", "mpg", "-0.9856266")),
      list(value = c("disp", "mpg", "-0.9618611")),
      list(value = c("mpg", "cyl", "-0.9856266")),
      list(value = c("cyl", "cyl", " 1.0000000")),
      list(value = c("disp", "cyl", " 0.9912808")),
      list(value = c("mpg", "disp", "-0.9618611")),
      list(value = c("cyl", "disp", " 0.9912808")),
      list(value = c("disp", "disp", " 1.0000000"))
    )
  )
  expect_equal(
    plot$x$opts$series[[1]]$type,
    "heatmap"
  )
})

test_that("e_error_bar plot has the good data structure and type", {
  df <- data.frame(
    x = factor(c(1, 2)),
    y = c(1, 5),
    upper = c(1.1, 5.3),
    lower = c(0.8, 4.3)
  )

  plot <- df |>
    e_charts(x) |>
    e_bar(y) |>
    e_error_bar(lower, upper)

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  expect_equal(
    plot$x$opts$series[[1]]$data,
    list(
      list(value = c("1", "1")),
      list(value = c("2", "5"))
    )
  )
  expect_equal(
    plot$x$opts$series[[2]]$type,
    "custom"
  )
  expect_equal(
    plot$x$opts$series[[2]]$renderItem,
    htmlwidgets::JS("sessionStorage.setItem('ErrorBar.oss','[\"\",\"\",\"1\"]'); renderErrorBar2")
  )
})


test_that("e_boxplot plot has the good data structure and type", {
  set.seed(1)
  df <- data.frame(
    x = c(
      round(rnorm(100), 5),
      round(runif(100, -5, 10), 5),
      round(rnorm(100, 10, 3), 5)
    ),
    grp = c(
      rep(LETTERS[1], 100),
      rep(LETTERS[2], 100),
      rep(LETTERS[3], 100)
    )
  )

  plot <- df |>
    group_by(grp) |>
    e_charts() |>
    e_boxplot(x)

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  ### The decimals are problematic so instead, check that the differences between the two expressions tend towards zero

  # expect_equal(
  #   plot$x$opts$series[[1]]$data,
  #   list(c(-2.214700, -0.510335, 0.113909, 0.693351, 2.401618),
  #        c(-4.583193, -2.199190, 0.671524, 4.607498, 9.723452),
  #        c(3.144293, 8.093827, 9.880848, 12.061566, 17.492985))
  # )

  # difference between the two expressions
  difference <- unlist(plot$x$opts$series[[1]]$data) - unlist(list(
    c(-2.214700, -0.510335, 0.113909, 0.693351, 2.401618),
    c(-4.583193, -2.199190, 0.671524, 4.607498, 9.723452),
    c(3.144293, 8.093827, 9.880848, 12.061566, 17.492985)
  ))
  difference_test <- difference < 10^-5

  expect_true(unique(difference_test))
  expect_equal(
    plot$x$opts$series[[1]]$type,
    "boxplot"
  )
})


test_that("e_histogram plot has the good data structure and type", {
  set.seed(1)
  df <- data.frame(
    x = 1:10,
    y = rnorm(10, 20, 12)
  )

  plot <- df |>
    e_charts() |>
    e_histogram(y) |>
    e_tooltip()

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  expect_equal(
    plot$x$opts$series[[1]]$data,
    list(
      list(7.5, 1),
      list(12.5, 2),
      list(17.5, 1),
      list(22.5, 2),
      list(27.5, 3),
      list(32.5, 0),
      list(37.5, 1)
    )
  )
  expect_equal(
    plot$x$opts$series[[1]]$type,
    "bar"
  )
})



test_that("e_density plot has the good data structure and type", {
  set.seed(1)
  df <- data.frame(
    x = 1:10,
    y = rnorm(10, 20, 12)
  )

  plot <- df |>
    e_charts() |>
    e_histogram(y) |>
    e_density(
      y,
      name = "density",
      areaStyle = list(opacity = .4),
      smooth = TRUE,
      y_index = 1
    ) |>
    e_tooltip()

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  expect_equal(
    plot$x$opts$series[[1]]$data,
    list(
      list(7.5, 1),
      list(12.5, 2),
      list(17.5, 1),
      list(22.5, 2),
      list(27.5, 3),
      list(32.5, 0),
      list(37.5, 1)
    )
  )
  expect_equal(
    plot$x$opts$series[[1]]$type,
    "bar"
  )
})


test_that("e_lm plot has the good data structure and type", {
  plot <- iris[c(1:3, 101:103), ] |>
    group_by(Species) |>
    e_charts(Sepal.Length) |>
    e_line(Sepal.Width) |>
    e_lm(Sepal.Width ~ Sepal.Length) |>
    e_x_axis(min = 4)

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  expect_equal(
    plot$x$opts$series[[1]]$data,
    list(
      list(value = c(4.7, 3.2)),
      list(value = c(4.9, 3.0)),
      list(value = c(5.1, 3.5))
    )
  )
  expect_equal(
    plot$x$opts$series[[1]]$type,
    "line"
  )
})



test_that("e_loess plot has the good data structure and type", {
  plot <- mtcars[1:7, ] |>
    e_charts(disp) |>
    e_scatter(mpg, qsec) |>
    e_loess(mpg ~ disp)

  expect_s3_class(plot, "echarts4r")
  expect_s3_class(plot, "htmlwidget")

  ### same as earlier

  # expect_equal(
  #   plot$x$opts$series[[1]]$data,
  #   list(list(value = c(108.00000, 22.80000, 18.61000, 13.01598)),
  #        list(value = c(160.000000, 21.000000, 16.460000,  3.689498)),
  #        list(value = c(160.000000, 21.000000, 17.020000,  6.118721)),
  #        list(value = c(225.00, 18.10, 20.22, 20.00)),
  #        list(value = c(258.00000, 21.40000, 19.44000, 16.61644)),
  #        list(value = c(360.000000, 18.700000, 17.020000,  6.118721)),
  #        list(value = c(360.00, 14.30, 15.84,  1.00))
  #   ))


  difference <-
    unlist(plot$x$opts$series[[1]]$data) - unlist(list(
      list(value = c(108.00000, 22.80000, 18.61000, 13.01598)),
      list(value = c(
        160.000000,
        21.000000,
        16.460000,
        3.689498
      )),
      list(value = c(
        160.000000,
        21.000000,
        17.020000,
        6.118721
      )),
      list(value = c(225.00, 18.10, 20.22, 20.00)),
      list(value = c(258.00000, 21.40000, 19.44000, 16.61644)),
      list(value = c(
        360.000000,
        18.700000,
        17.020000,
        6.118721
      )),
      list(value = c(360.00, 14.30, 15.84, 1.00))
    ))
  difference_test <- difference < 10^-5

  expect_true(unique(difference_test))
  expect_equal(
    plot$x$opts$series[[1]]$type,
    "scatter"
  )
})

Try the echarts4r package in your browser

Any scripts or data that you put into this service are public.

echarts4r documentation built on July 9, 2023, 7:26 p.m.