You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过引用操作task对象的运行机制是怎样的?

问题解答

你观察到的现象是mlr3框架为了保障基准测试可复现性刻意设计的机制,核心逻辑如下:

  • mlr3中的Task、Learner等核心对象都基于R6类实现,天然是引用语义:多个变量指向同一个R6引用时,修改任意一个变量对应的对象属性,所有指向该引用的变量都会同步生效,这就是你在步骤1、步骤2中观察到的现象。
  • benchmark()函数默认会对输入的所有Task、Learner、Resampling对象执行克隆操作:
    1. 函数首先会对输入的对象做去重识别,你输入的list_of_tasks中第2、3个是同一个引用,因此只会被克隆一次,克隆得到的新引用会同时赋值给基准测试结果中对应的两个条目,所以你修改结果中第2行的Task,第3行也会同步变更。
    2. 克隆操作会生成完全独立的新R6对象,和你最初传入的原始Task引用没有关联,因此你修改原始列表中的Task不会影响基准测试结果中的对象,反过来修改结果中的Task也不会影响你最初构造的列表。

如果确实需要让基准测试直接使用你传入的原始引用,可以在调用benchmark()时设置clone = FALSE,但该操作会破坏基准测试的独立性,不推荐常规场景使用。

内容的提问来源于stack exchange,提问作者ds_col

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:54:00