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

mlr3示例中resample函数报错:无法找到匹配方法的解决方案

mlr3中resample函数报错的原因及解决方法

问题重现

运行以下mlr3代码时触发错误:

library(mlr3verse)
task_penguins = as_task_classif(species ~ ., data = palmerpenguins::penguins)
learner = lrn("classif.rpart", cp = .01)
resampling = rsmp("cv", folds = 3L)
rr = resample(task_penguins, learner, resampling)

错误信息:

Error: unable to find an inherited method for function ‘resample’ for signature ‘x = "TaskClassif", y = "LearnerClassifRpart"’
3.
stop(gettextf("unable to find an inherited method for function %s for signature %s",
sQuote(fdef@generic), sQuote(cnames)), call. = FALSE, domain = NA)
2.
(function (classes, fdef, mtable)
{
methods <- .findInheritedMethods(classes, fdef, mtable)
if (length(methods) == 1L) ...
1.
resample(task_penguins, learner, resampling)

错误原因

这个错误的核心是命名空间冲突:当前环境中加载了其他也定义了resample函数的包(比如caret或旧版本dplyr),这些包的resample函数覆盖了mlr3中的同名方法,导致R无法识别mlr3专属的Task和Learner对象类型。

解决方法

有两种可靠的解决方式:

  • 方式一:指定mlr3命名空间调用函数
    直接用mlr3::resample替代resample,明确调用mlr3包中的函数:

    rr = mlr3::resample(task_penguins, learner, resampling)
    
  • 方式二:清理环境并重新加载mlr3verse
    先卸载冲突的包,再重新加载mlr3verse:

    # 卸载可能冲突的包(示例为caret)
    detach("package:caret", unload = TRUE)
    # 重新加载mlr3verse
    library(mlr3verse)
    # 再次执行resample
    rr = resample(task_penguins, learner, resampling)
    
  • 额外建议
    启动新的R会话,仅加载mlr3verse和palmerpenguins包,避免加载其他可能引发冲突的包,从根源上避免命名空间问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:28:11