Skip to content

Automatically grade a vector resulting from student code using gradethis::grade_this() and vec_grade() to compare the student's result with the author's solution.

Usage

grade_this_vector(
  correct = NULL,
  pre_check = NULL,
  post_check = NULL,
  pass_if_equal = TRUE,
  ...,
  max_diffs = 3,
  check_class = TRUE,
  check_length = TRUE,
  check_values = TRUE,
  check_names = TRUE,
  hint = getOption("gradethis.fail.hint", FALSE),
  encourage = getOption("gradethis.fail.encourage", FALSE),
  pass.praise = NULL
)

Arguments

correct

[character(1)]
The message shown to the student when their .result matches the exercise .solution, if pass_if_equal is TRUE.

pre_check

[expression]
Code to run before or after the table or vector grading is performed. The pre check runs before calling gradethis::pass_if_equal() so that you can modify or adjust the student's .result or the .solution if there are parts of either that need to be ignored. These arguments can also be used in conjunction with the pass_if_equal option when the grading requirements are more involved.

post_check

[expression]
Code to run before or after the table or vector grading is performed. The pre check runs before calling gradethis::pass_if_equal() so that you can modify or adjust the student's .result or the .solution if there are parts of either that need to be ignored. These arguments can also be used in conjunction with the pass_if_equal option when the grading requirements are more involved.

pass_if_equal

[logical(1)]
When TRUE (default), the .result is compared to the .solution with gradethis::pass_if_equal() after the pre check and before calling the tblcheck grading function. When FALSE, you will need to include your own call to gradethis::pass() in either pre_check or post_check for the student to be able to receive a passing grade.

...

Additional arguments passed to graded() or additional data to be included in the feedback object.

max_diffs

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

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_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.

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.

pass.praise

Logical TRUE or FALSE to determine whether a praising phrase should be automatically prepended to any pass() or pass_if_equal() messages. Sets the gradethis.pass.praise option.

Value

The returned feedback is equivalent to gradethis grading code using grade_this() with the following components:

  1. First the pre_check code, if any, is evaluated. If this code calls pass(), fail(), or their equivalents, that feedback is provided immediately.

  2. If pass_if_equal is TRUE, then pass_if_equal() is called to compare the .result to the .solution. The message in correct is used for the feedback.

  3. The appropriate tblcheck grading function is called, returning any feedback:

    1. grade_this_table() returns the results from tbl_grade()

    2. grade_this_vector() returns the results from vec_grade()

  4. The post_check code, if any, is evaluated and any feedback from a call to pass(), fail(), or their equivalents is returned.

  5. Finally, if no other feedback is returned, the feedback from gradethis::fail() is provided to the student, using the options fail.message, fail.hint and fail.encourage.

See also

vec_grade()

Other graders: grade_this_table()

Examples

ex <- gradethis::mock_this_exercise(
  .solution_code = tibble(x = 1:3, y = letters[x]),
  .user_code = tibble(x = 1:3, y = c("A", "b", "c"))
)

#' ## Grading Vectors ----
# Here we use `pre_check` to modify `.result` and
grade_this_vector(
  pre_check = {
    .result <- .result$y
    .solution <- .solution$y
  }
)(ex)
#> #> grade_this_vector(pre_check = {
#> #>     .result <- .result$y
#> #>     .solution <- .solution$y
#> #> })(ex)
#> Error in rlang::eval_bare(x, env): could not find function "tibble"
#> <tblcheck_graded: [Neutral]
#>   A problem occurred with the grading code for this exercise.
#> >

# Roughly equivalent to...
gradethis::grade_this({
  .result <- .result$y
  .solution <- .solution$y
  gradethis::pass_if_equal()
  vec_grade()
  gradethis::fail()
})(ex)
#> Warning: restarting interrupted promise evaluation
#> #> (gradethis::grade_this({
#> #>     .result <- .result$y
#> #>     .solution <- .solution$y
#> #>     gradethis::pass_if_equal()
#> #>     vec_grade()
#> #>     gradethis::fail()
#> #> }))(ex)
#> Error in rlang::eval_bare(x, env): could not find function "tibble"
#> <gradethis_graded: [Neutral]
#>   A problem occurred with the grading code for this exercise.
#> >