1

我有一个 mlr3 任务,我有这样的数据集:

数据集“全部”

all <- data.frame(v1 = c("a", "b"),
              v2 = c(1, 2),
              data = c("test", "train"))

library(mlr3)
task <- TaskClassif$new("loan", all, target = "v1")

如何按列“数据”值“火车”过滤任务?

我尝试了 task$filter(data == "train") 和许多其他组合,但不起作用。

dput(task)
<environment>

str(task)
Classes 'TaskClassif', 'TaskSupervised', 'Task', 'R6' <TaskClassif:loan>
4

1 回答 1

3

有一种as.data.table方法

methods(class = 'Task')
#[1] as_task       as_tasks      as.data.table

因此,我们可以将其转换为 adata.table并使用 data.table 的方法进行子集化

library(data.table)
as.data.table(task)[data == 'train']
#   v1  data v2
#1:  b train  2

或者可以提取data

task$data()[data == 'test']
#    v1 data v2
#1:  a test  1

或者创建一个新实例

tasktrain <-  TaskClassif$new("loantrain",
           task$data()[data == 'train'], target = "v1")
tasktrain$data()
#   v1  data v2
#1:  b train  2
于 2020-08-20T18:29:11.830 回答