升级targets至1.11.3后tar_make()重复执行报错而非跳过流水线
问题:targets包二次执行tar_make报错:Item 7 of list input is not an atomic vector
脚本代码
library(targets) list( tar_target(states0_1, c("U")), tar_target(res1_1, identity(states0_1)) )
首次执行情况
首次执行tar_make(res1_1)运行正常,输出如下:
> tar_make(res1_1) + states0_1 dispatched ✔ states0_1 completed [0ms, 53 B] + res1_1 dispatched ✔ res1_1 completed [0ms, 53 B] ✔ ended pipeline [258ms, 2 completed, 0 skipped] Warning message: package ‘targets’ was built under R version 4.3.3
二次执行错误
再次执行tar_make(res1_1)时,并未跳过已构建的流水线,反而抛出错误:
> tar_make(res1_1) Warning message: package ‘targets’ was built under R version 4.3.3 Error: ! Error in tar_make(): Item 7 of list input is not an atomic vector See https://books.ropensci.org/targets/debugging.html
已尝试操作
- 卸载并重装targets包
- 执行
tar_destroy()后可重新运行流水线,但再次执行仍会出现相同错误
解决方案
这个问题核心是targets的元数据缓存出现异常,结合你看到的R版本与包编译版本不匹配的警告,可按以下步骤解决:
- 彻底清理缓存:除了
tar_destroy(),手动删除项目根目录下的.targets文件夹,完全清空旧的元数据和缓存文件,再重新运行流水线。 - 匹配R与包版本:如果你的R版本不是4.3.3,用
install.packages("targets", type = "binary")安装适配当前R版本的预编译包,避免版本不兼容导致的元数据解析问题。 - 避免指定单个target执行:直接运行
tar_make()让targets自动判断依赖状态,而非指定单个target,可规避元数据读取的异常。 - 更新到最新版targets:旧版本可能存在元数据处理的bug,执行
install.packages("targets")更新到最新稳定版,通常能解决这类缓存相关问题。
内容的提问来源于stack exchange,提问作者Sumali Bajaj
相关产品推荐
相关产品推荐

