Skip to content

Checks for differences between object and expected in the following order:

  1. Check class with vec_check_class()

  2. Check length with vec_check_dimensions()

  3. If the vector is a factor, check factor levels are the same with vec_check_levels()

  4. Check vector values are the same with vec_check_values()

  5. Check names with vec_check_names()

If the vectors differ

  • vec_check() returns a list describing the problem

  • vec_grade() returns a failing grade and informative message with gradethis::fail()

Usage

vec_check(
  object = .result,
  expected = .solution,
  check_class = TRUE,
  check_length = TRUE,
  check_levels = TRUE,
  check_values = TRUE,
  check_names = TRUE,
  env = parent.frame()
)

vec_grade(
  object = .result,
  expected = .solution,
  max_diffs = 3,
  check_class = TRUE,
  check_length = TRUE,
  check_values = TRUE,
  check_names = TRUE,
  env = parent.frame(),
  ...
)

Arguments

object

A vector to be compared to expected.

expected

A vector containing the expected result.

check_class

[logical(1)]
Whether to check that object and expected have the same classes.

check_length

[logical(1)]
Whether to check that object and expected have the same length.

check_levels

[logical(1)]
Whether to check that object and expected have the same factor levels.

check_values

[logical(1)]
Whether to check that object and expected contain the same values.

check_names

[logical(1)]
Whether to check that object and expected have the same names.

env

The environment in which to find .result and .solution.

max_diffs

[numeric(1)]
The maximum number of mismatched values to print. Defaults to 3.

...

Arguments passed on to gradethis::fail

hint

Include a code feedback hint with the failing message? This argument only applies to fail() and fail_if_equal() and the message is added using the default options of give_code_feedback() and maybe_code_feedback(). The default value of hint can be set using gradethis_setup() or the gradethis.fail.hint option.

encourage

Incude a random encouraging phrase with random_encouragement()? The default value of encourage can be set using gradethis_setup() or the gradethis.fail.encourage option.

Value

If there are any issues, a list from vec_check() or a gradethis::fail() message from vec_grade(). Otherwise, invisibly returns NULL.

Problems

  1. class: object doesn't have the same classes as expected.

  2. length: object doesn't have the same length as expected.

  3. levels_n, levels, levels_reversed, levels_order: See vec_check_levels().

  4. values: object doesn't contain the same values as expected.

  5. names: object has different names than expected.

  6. names_order: object has the same names as expected, but in a different order.

Examples

.result <- 1:10
.solution <- letters[1:10]
vec_check()
#> <tblcheck problem>
#> Your result should be a vector of text (class `character`), but it is a vector of integers (class `integer`).
#> $ type           : chr "class"
#> $ expected       : chr "character"
#> $ actual         : chr "integer"
#> $ expected_length: int 10
#> $ actual_length  : int 10
#> $ location       : chr "vector"
vec_grade()
#> <gradethis_graded: [Incorrect]
#>   Your result should be a vector of text (class `character`), but
#>   it is a vector of integers (class `integer`).
#> >

.result <- 1:10
.solution <- 1:11
vec_check()
#> <tblcheck problem>
#> Your result should contain 11 values, but it has 10 values. I expected your result to include the value `11`.
#> $ type           : chr "length"
#> $ expected       : int [1:11] 1 2 3 4 5 6 7 8 9 10 ...
#> $ actual         : int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ expected_length: int 11
#> $ actual_length  : int 10
#> $ location       : chr "vector"
vec_grade()
#> <gradethis_graded: [Incorrect]
#>   Your result should contain 11 values, but it has 10 values. I
#>   expected your result to include the value `11`.
#> >

.result <- 1:10
.solution <- rlang::set_names(1:10, letters[1:10])
vec_check()
#> <tblcheck problem>
#> Your result should have the names `a`, `b`, `c`, and 7 more. 
#> $ type    : chr "names"
#> $ missing : chr [1:10] "a" "b" "c" "d" ...
#> $ location: chr "vector"
vec_grade()
#> <gradethis_graded: [Incorrect]
#>   Your result should have the names `a`, `b`, `c`, and 7 more.
#> >
vec_grade(max_diffs = 5)
#> <gradethis_graded: [Incorrect]
#>   Your result should have the names `a`, `b`, `c`, `d`, `e`, and
#>   5 more.
#> >
vec_grade(max_diffs = Inf)
#> <gradethis_graded: [Incorrect]
#>   Your result should have the names `a`, `b`, `c`, `d`, `e`, `f`,
#>   `g`, `h`, `i`, and `j`.
#> >

.result <- 1:10
.solution <- 11:20
vec_check()
#> <tblcheck problem>
#> The first 3 values of your result should be `11`, `12`, and `13`, not `1`, `2`, and `3`.
#> $ type    : chr "values"
#> $ expected: int [1:10] 11 12 13 14 15 16 17 18 19 20
#> $ actual  : int [1:10] 1 2 3 4 5 6 7 8 9 10
#> $ location: chr "vector"
vec_grade()
#> <gradethis_graded: [Incorrect]
#>   The first 3 values of your result should be `11`, `12`, and
#>   `13`, not `1`, `2`, and `3`.
#> >
vec_grade(max_diffs = 5)
#> <gradethis_graded: [Incorrect]
#>   The first 5 values of your result should be `11`, `12`, `13`,
#>   `14`, and `15`, not `1`, `2`, `3`, `4`, and `5`.
#> >
vec_grade(max_diffs = Inf)
#> <gradethis_graded: [Incorrect]
#>   The first 10 values of your result should be `11`, `12`, `13`,
#>   `14`, `15`, `16`, `17`, `18`, `19`, and `20`, not `1`, `2`,
#>   `3`, `4`, `5`, `6`, `7`, `8`, `9`, and `10`.
#> >