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

R包异常行为:devtools::load_all加载后提示找不到内部函数

问题原因
  1. 并行环境隔离:DTL_similarity_search_results_fast函数使用了future::plan(future::multisession)启用多会话并行,multisession模式会启动完全独立的后台R子进程,这些子进程默认不会继承主进程中devtools::load_all()加载的未安装包的函数环境,也不会自动加载你正在开发的本地包。
  2. 串行函数正常的逻辑:DTL_similarity_search_results使用串行for循环执行,所有逻辑都在已经加载了包内全部函数的主进程中运行,所以可以正常调用内部的DTL_similarity_search函数。
解决方案

你可以根据使用场景任选以下一种方法修复:

  • 方法1:显式给子进程传递依赖的包/函数
    调用furrr::future_map_dfr时添加.packages参数传入你的包名,让子进程主动加载对应的包,同时如果包还未正式安装到本地R库,可以补充.export参数显式导出需要用到的内部函数:
    results <- furrr::future_map_dfr(search_patterns, function(pattern){
      # 原有函数逻辑保持不变
      print('DTL_similarity_search2')
      search_id <- DTL_similarity_search(pattern,
                                         transformation,
                                         database_names,
                                         metadata_filters,
                                         filter_category,
                                         minimum_similarity,
                                         max_edit_distance = max_edit_distance,
                                         max_length_difference = max_length_difference)
      if(is.null(search_id)){
        return(tibble::tibble())
      }
      ret <- DTL_get_results(search_id)
      if(!is.null(ret) && nrow(ret) > 0 )ret$search_pattern <- pattern
      ret
    }, .packages = "你的R包名称", .export = c("DTL_similarity_search", "DTL_get_results", "pattern_to_vec", "messagef"))
    
  • 方法2:更换并行模式(仅支持非Windows系统)
    将future::plan(future::multisession)修改为future::plan(future::multicore),multicore模式通过fork主进程环境实现并行,子进程会直接继承主进程中load_all加载的所有函数,不需要额外配置。
  • 方法3:显式调用包内函数
    首先在包的NAMESPACE文件中导出DTL_similarity_search、DTL_get_results等需要在并行逻辑中调用的函数,之后将并行代码中的函数调用改为你的包名::DTL_similarity_search的显式调用形式,同时在.packages参数中添加你的包名即可。

另外注意代码中存在purrr:::调用非导出函数的写法,建议替换为purrr的公共函数调用,避免子进程调用报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:27:00