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

调用parsnip的linear_reg函数报错:找不到该函数对象

解决devtools::check()中找不到parsnip函数的问题

规范解决方案

解决这个问题的关键是明确指定命名空间调用parsnip函数,同时确保包依赖声明正确:

  1. 在DESCRIPTION里写对依赖
    把parsnip加到Imports字段(如果只是在函数内部调用的话),示例:

    Imports:
      parsnip,
      purrr
    
  2. 在函数里安全获取parsnip函数
    别用match.fun或者不加限制的get(),改用getFromNamespace()明确指定从parsnip命名空间取函数,这样devtools检查时能准确找到函数位置。修改你的pmap调用部分:

    # 假设你是通过字符串(比如"linear_reg")来指定函数
    purrr::pmap(your_param_list, function(func_name, ...) {
      # 明确从parsnip命名空间获取函数
      reg_func <- getFromNamespace(func_name, ns = "parsnip")
      reg_func(...) %>% parsnip::set_engine("lm")
    })
    

如果是直接调用已知的parsnip函数(比如linear_reg),更简单——直接写parsnip::linear_reg()就行,不用绕弯子找函数。

为啥之前的方法不管用?

  • match.fun()在devtools的严格检查环境里,只会搜当前环境和全局环境,不会自动找导入的包命名空间里的函数,所以找不到linear_reg。
  • loadNamespace("parsnip")只是加载了包的命名空间,但没把函数暴露到当前环境,所以match.fun还是找不到。
  • 用get()能跑是因为交互式环境里你可能已经加载了parsnip,但devtools检查是在干净环境里跑的,而且get()如果不指定环境,万一全局有同名函数会搞混,不安全也不可靠。

验证修改

改完之后重新跑devtools::check(),应该就能解决找不到对象的错误了。记得所有parsnip相关的函数调用,要么加parsnip::前缀,要么用getFromNamespace()安全获取。


附:用户提供的相关信息

函数代码

fast_regression_parsnip_spec_tbl <- function(...) {
  purrr::pmap(list(...), function(func_name, ...) {
    func <- match.fun(func_name)
    func(...) %>% parsnip::set_engine("lm")
  }) %>%
    dplyr::bind_rows()
}

错误回溯

Error in match.fun(func_name) : 
  object 'linear_reg' of mode 'function' was not found

会话信息

sessionInfo()
R version 4.3.1 (2023-06-16)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.3 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

time zone: Etc/UTC
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] parsnip_1.1.1 purrr_1.0.2   dplyr_1.1.3  

loaded via a namespace (and not attached):
 [1] gtable_0.3.4        xfun_0.40           ggplot2_3.4.4       lattice_0.22-5      vctrs_0.6.4        
 [6] tools_4.3.1         generics_0.1.3      tibble_3.2.1        fansi_1.0.5         pkgconfig_2.0.3    
[11] Matrix_1.6-1.1      lifecycle_1.0.3     compiler_4.3.1      munsell_0.5.0       carData_3.0-5      
[16] codetools_0.2-19    htmltools_0.5.6.1   car_3.1-2           pillar_1.9.0        nnet_7.3-19        
[21] MASS_7.3-60         tidyselect_1.2.0    digest_0.6.33       rpart_4.1.21        grid_4.3.1         
[26] colorspace_2.1-0    cli_3.6.1           magrittr_2.0.3      survival_3.5-7      utf8_1.2.3         
[31] broom_1.0.5         splines_4.3.1       backports_1.4.1     scales_1.2.1        stats4_4.3.1       
[36] rmarkdown_2.25      minqa_1.2.6         lava_1.7.3          nloptr_2.0.3        evaluate_0.22      
[41] knitr_1.44          hardhat_1.3.0       fastmap_1.1.1       modelr_0.1.11       multcomp_1.4-25    
[46] rlang_1.1.1         globals_0.16.2

完整devtools检查日志

── R CMD check results ── yourpackage 0.1.0 ────────────────────────────────────
Duration: 1m 23s

❯ checking R code for possible problems ... ERROR
Found the following errors:
Error in match.fun(func_name) :
object 'linear_reg' of mode 'function' was not found
Calls: fast_regression_parsnip_spec_tbl ... -> pmap_ -> .f -> match.fun
Execution halted

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:15:35