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

在R包testthat测试中使用memdb_frame报错:找不到RSQLite包

解决R包testthat测试中memdb_frame依赖RSQLite的报错问题

问题描述

  • 为R包开发了操作dbplyr数据库连接的函数,交互式测试时用memdb_frame()创建虚拟数据库可正常运行:
    x <- memdb_frame(caseID = 1, DOB = 2, Other = 3)
    
  • 但在包的testthat测试流程中,使用相同代码创建数据库时触发报错:
    Error in `(function (cond) 
    .Internal(C_tryCatchHelper(addr, 1L, cond)))(structure(list(message = "there is no package called 'RSQLite'", 
        call = loadNamespace(x), package = "RSQLite", lib.loc = NULL), class = c("packageNotFoundError", 
    "error", "condition")))`: error in evaluating the argument 'drv' in selecting a method for function 'dbConnect': there is no package called 'RSQLite'
    
  • 此前遇到过类似的RMySQL依赖报错,通过将RMySQL添加到包的Suggests列表解决,当前包的Suggests配置为:
    Suggests:
        dbplyr,
        knitr,
        rmarkdown,
        RMySQL,
        sf,
        testthat (>= 3.0.0),
        tibble,
        tidygraph
    
  • 错误回溯信息显示,调用链最终指向DBI::dbConnect(RSQLite::SQLite(), ":memory:", create = TRUE),说明测试环境中未加载RSQLite。

解决方案

  • 打开包的DESCRIPTION文件,将RSQLite添加到Suggests列表中,更新后的配置如下:
    Suggests:
        dbplyr,
        knitr,
        rmarkdown,
        RMySQL,
        RSQLite,
        sf,
        testthat (>= 3.0.0),
        tibble,
        tidygraph
    
  • 原理:交互式环境中可能已全局安装并加载RSQLite,但包的测试环境是独立隔离的,只有在Suggests中声明依赖,测试框架才会确保该包被安装并可调用,从而解决memdb_frame()底层依赖RSQLite创建内存数据库的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:01:05