通过引用操作任务对象:这是如何工作的?
Manipulating task objects by reference: How does this work?
我很难理解如果我使用像 x <- task
这样的命令到底会发生什么。例如,这是我所做的:
- 我有一个任务、学习者和重采样的列表,我将它们结合起来进行基准测试。当我手动进行匹配时,我的任务列表包含同一任务的多次重复,例如我列表中的第二个和第三个条目是相同的。所以,我很容易理解以下几行中发生的事情:
这是可以理解的。由于我指的是同一个对象,我列表的第三个条目必须随着我操作第二个条目而改变(是的,它们是同一个对象)
- 现在,我使用此列表生成基准设计并执行重采样:
design = data.table(
task = list_of_tasks,
learner = list_of_learners,
resampling = list_of_resamplings
)
bmr = benchmark(design)
tab = bmr$aggregate(c(msr("classif.acc")))
结果 tab
有一列包含我可以检查和操作的重采样结果。这些重采样结果包括我的原始任务(至少这是我的理解)。操作“重采样结果中的任务”与步骤 1 完全相同,并且具有相同的效果(同样,毫不奇怪):
- 但是现在,这里发生了什么(我接下来执行以下几行)?似乎“重采样结果中的任务”对于第 2 行和第 3 行是相同的对象,但在原始列表中 not:
我好像漏掉了什么。但是我怎么理解呢?
调用 benchmark()
时克隆任务、学习器和重采样,即创建每个对象的副本。 design
和 tab
中的条目不引用内存中的相同对象。因此,更改 tab$resample_result[[2]]$task
不会更改 list_of_tasks[[2]]
.