从自定义 R 包构建的函数调用 returns 旧版本函数的结果

Function call built from a custom R package returns the result of an older version of the function

我通常做一个标准的 reprex,SO post,冲洗并重复,但这是一个很难复制的。我会尽量描述我的问题。

背景

我正在尝试在 R 中构建一个自定义包,我简单地称之为 myTools。构建 运行s 没有错误,并且所有功能都有效(+/- 一些我需要完善的地方)。它只是我发现对我的工作有帮助的函数的集合。我有一个特定的函数 get_data(),它读取 CSV 文件并清理它(这是一个人类可读的,但完全反整洁的数据集)。该函数清理它并使数据整洁(例如,想象一张发票变成一个整洁的数据集)。

问题

每次我编译包并测试函数 get_data() 时,不知何故 R 运行 是该函数的旧版本。我已经 运行 函数中的一行一行地手动,代码的结果没有错误并且 returns 预期的整洁数据集。但是,如果我在控制台中调用已编译的 get_data(),则会调用该函数的 版本。

备注

我在函数中添加了一个简单的行 print("Hello Bob!")。构建和安装后它不会显示在输出中。同样,更多证据表明 R 似乎正在使用我的函数的一些旧源代码并且正在编译那个源代码。

pkgbuild::find_rtools() returns TRUE

我关闭了构建项目,打开了一个新的 RStudio/R 会话。将我的库加载到一个空白脚本文件中。按 ctrl 键单击函数 get_data(),RStudio 确实将我带到了该函数的旧版本。

预期结果

get_data() 的新编译版本将在 console/script 中调用。

感谢任何提示和尝试的想法。谢谢!

从你描述工作流程的方式来看,这似乎应该已经解决了,但由于我是 RStudio 专家,我将仅依靠我的经验。

TL;DR

.libPaths() 目录中查找包的所有实例并移动或删除它们。再试一次。

说明

对我来说,我的工作流程通常是:

# code some
devtools::load_all("path/to/package")
# test/code some more
devtools::load_all("path/to/package")
# etc

# every now and then
devtools::install("path/to/package")
# or
install.packages(devtools::build("path/to/package"))

这最后一部分目前通常可以正常工作(从字面上看……永远不会超过一天)。但是,我发现(不幸的是,无法重现,不确定它是错误还是已知的设计特征)当包中有一个目录时,后续的 load_alls 不会被其他包中的所有函数公平对待.也许有一种方法可以追踪 functions/namespaces.

的搜索路径

所以最重要的是,确保你没有通过 R 的包搜索机制找到任何陈旧的安装 (.libPaths())。