1library(testthat) 2library(recipes) 3library(modeldata) 4library(modeldata) 5data(credit_data) 6 7 8set.seed(342) 9in_training <- sample(1:nrow(credit_data), 2000) 10 11credit_tr <- credit_data[ in_training, ] 12credit_te <- credit_data[-in_training, ] 13 14test_that('simple median', { 15 rec <- recipe(Price ~ ., data = credit_tr) 16 17 impute_rec <- rec %>% 18 step_impute_median(Age, Assets, Income, id = "") 19 imputed <- prep(impute_rec, training = credit_tr, verbose = FALSE) 20 te_imputed <- bake(imputed, new_data = credit_te) 21 22 expect_equal(te_imputed$Age, credit_te$Age) 23 24 assets_pred <- median(credit_tr$Assets, na.rm = TRUE) 25 assets_pred <- recipes:::cast(assets_pred, credit_tr$Assets) 26 expect_equal(te_imputed$Assets[is.na(credit_te$Assets)], 27 rep(assets_pred, sum(is.na(credit_te$Assets)))) 28 29 inc_pred <- median(credit_tr$Income, na.rm = TRUE) 30 inc_pred <- recipes:::cast(inc_pred, credit_tr$Assets) 31 expect_equal(te_imputed$Income[is.na(credit_te$Income)], 32 rep(inc_pred, sum(is.na(credit_te$Income)))) 33 34 medians <- vapply(credit_tr[, c("Age", "Assets", "Income")], 35 median, double(1), na.rm = TRUE) 36 medians <- purrr::map2(medians, credit_tr[, c("Age", "Assets", "Income")], recipes:::cast) 37 medians <- unlist(medians) 38 imp_tibble_un <- 39 tibble(terms = c("Age", "Assets", "Income"), 40 model = rep(NA_real_, 3), 41 id = "") 42 imp_tibble_tr <- 43 tibble(terms = c("Age", "Assets", "Income"), 44 model = as.integer(unlist(medians)), 45 id = "") 46 47 expect_equal(as.data.frame(tidy(impute_rec, 1)), as.data.frame(imp_tibble_un)) 48 expect_equal(as.data.frame(tidy(imputed, 1)), as.data.frame(imp_tibble_tr)) 49 50}) 51 52 53test_that('non-numeric', { 54 rec <- recipe(Price ~ ., data = credit_tr) 55 56 impute_rec <- rec %>% 57 step_impute_median(Assets, Job) 58 expect_error(prep(impute_rec, training = credit_tr, verbose = FALSE)) 59}) 60 61test_that('all NA values', { 62 rec <- recipe(Price ~ ., data = credit_tr) 63 64 impute_rec <- rec %>% 65 step_impute_median(Age, Assets) 66 imputed <- prep(impute_rec, training = credit_tr, verbose = FALSE) 67 imputed_te <- bake(imputed, new_data = credit_te %>% mutate(Age = NA)) 68 69 expect_equal(unique(imputed_te$Age), imputed$steps[[1]]$medians$Age) 70}) 71 72 73test_that('printing', { 74 impute_rec <- recipe(Price ~ ., data = credit_tr) %>% 75 step_impute_median(Age, Assets, Income) 76 expect_output(print(impute_rec)) 77 expect_output(prep(impute_rec, training = credit_tr, verbose = TRUE)) 78}) 79 80