Skip to content

Commit 503d661

Browse files
authored
fix: learners can handle new factor levels (#1403)
1 parent a333e13 commit 503d661

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

R/assertions.R

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,12 @@ assert_predictable = function(task, learner) {
207207
predict_type = fget_keys(task$col_info, i = ids, j = "type", key = "id")
208208
predict_levels = fget_keys(task$col_info, i = ids, j = "levels", key = "id")
209209

210-
ok = all(train_type == predict_type) && all(pmap_lgl(list(x = train_levels, y = predict_levels), identical))
210+
211+
ok = all(train_type == predict_type)
212+
213+
if ("new_levels" %nin% learner$properties) {
214+
ok = ok && all(pmap_lgl(list(x = train_levels, y = predict_levels), identical))
215+
}
211216

212217
if (!ok) {
213218
stopf("Learner '%s' received task with different column info (feature type or factor level ordering) during train and predict.", learner$id)

tests/testthat/test_Learner.R

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,3 +1015,16 @@ test_that("config error does not trigger callback", {
10151015
l$encapsulate("evaluate", lrn("classif.featureless"))
10161016
expect_error(l$train(tsk("iris")), regexp = "You misconfigured the learner")
10171017
})
1018+
1019+
test_that("new_levels property is working", {
1020+
learner = lrn("classif.featureless")
1021+
task = tsk("penguins")
1022+
learner$train(task)
1023+
data = task$data()
1024+
set(data, i = 1L, j = "island", value = "NewIsland")
1025+
1026+
expect_error(learner$predict_newdata(data), "received task with different column info")
1027+
1028+
learner$properties = c(learner$properties, "new_levels")
1029+
expect_prediction(learner$predict_newdata(data))
1030+
})

0 commit comments

Comments
 (0)