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

R应用集成testthat报错:Error in x[[method]](...) : attempt to apply non-function

解决非包R项目使用testthat时的"attempt to apply non-function"错误

我之前在非包项目里硬凑DESCRIPTION用testthat的时候,也踩过一模一样的坑!这个错误看起来摸不着头脑,其实大多是因为DESCRIPTION的格式不符合testthat的预期,或者调用测试的方式不对。给你几个靠谱的排查和解决步骤:

1. 先把DESCRIPTION的格式补全规范

testthat哪怕是在非包项目里,也会默认按照R包的DESCRIPTION规则来读取信息,缺必填字段或者格式不对就会触发奇怪的错误。你至少要把这些字段写对:

Package: YourAppName  # 随便取个项目名,不能空
Version: 0.0.1       # 版本号要符合x.y.z的格式
Title: Short App Description  # 简短的项目标题
Description: Longer description of your R application.  # 项目的详细描述
License: MIT + file LICENSE  # 随便选一个许可证占位即可

注意字段名是大小写敏感的,比如Package不能写成package,每个字段的冒号后面要留空格。

2. 别用devtools的测试命令,直接调用testthat的目录测试

devtools::test()是专门给R包设计的,非包项目用它会触发很多包相关的逻辑,容易出问题。你应该直接指定测试目录来运行:

testthat::test_dir("tests/testthat")

前提是你的测试文件都放在tests/testthat目录下,而且文件名必须以test-开头(比如test-utils.R),testthat才会识别。

3. 排查可能的缓存问题

如果之前用devtools跑过测试,R会话可能缓存了错误的包信息。直接重启R会话,然后再用testthat::test_dir()重新运行测试,很多时候就能解决问题。

4. 检查测试文件的目录结构

有时候空测试文件如果目录放错了(比如没放在tests/testthat下),或者命名不符合规则,也会触发奇怪的错误。确认你的项目结构是这样的:

你的项目根目录/
├── DESCRIPTION
└── tests/
    └── testthat/
        └── test-something.R  # 空文件也可以,但命名必须以test-开头

按这几步来,应该就能解决那个"attempt to apply non-function"的错误了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:03