Skip to content

Commit dab0b33

Browse files
authored
fix: task's cbind works with non-standard pk (#1079)
1 parent b165d9e commit dab0b33

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

NEWS.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
* refactor: Optimize runtime of setting row roles.
66
* refactor: Optimize runtime of marshalling.
77
* refactor: Optimize runtime of `Task$col_info`
8+
* fix: `Task$cbind()` now works with non-standard primary keys
9+
for `data.frames` (#961).
810
* fix: Triggering of fallback learner now has log-level "info"
911
instead of "debug" (#972)
1012

11-
1213
# mlr3 0.20.2
1314

1415
* refactor: Move RhpcBLASctl to suggest.

R/Task.R

+5-2
Original file line numberDiff line numberDiff line change
@@ -562,8 +562,11 @@ Task = R6Class("Task",
562562
return(invisible(self))
563563
}
564564

565-
row_ids = if (pk %in% names(data)) pk else self$row_ids
566-
data = as_data_backend(data, primary_key = row_ids)
565+
row_ids = if (pk %nin% names(data)) {
566+
data[[pk]] = self$row_ids
567+
}
568+
569+
data = as_data_backend(data, primary_key = pk)
567570
} else {
568571
assert_backend(data)
569572
if (data$ncol <= 1L) {

tests/testthat/test_Task.R

+8
Original file line numberDiff line numberDiff line change
@@ -634,3 +634,11 @@ test_that("divide requires ratio in (0, 1)", {
634634
test_that("divide requires ids to be row_ids", {
635635
expect_error(tsk("iris")$divide(ids = 0.5))
636636
})
637+
638+
test_that("cbind supports non-standard primary key (#961)", {
639+
tbl = data.table(x = runif(10), y = runif(10), myid = 1:10)
640+
b = as_data_backend(tbl, primary_key = "myid")
641+
task = as_task_regr(b, target = "y")
642+
task$cbind(data.table(x1 = 10:1))
643+
expect_true("x1" %in% task$feature_names)
644+
})

0 commit comments

Comments
 (0)