1

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

背景

我正在尝试在 R 中构建一个自定义包,我简单地称之为myTools. 构建运行没有错误,并且所有功能都可以正常工作(+/- 一些我需要完善的东西)。它只是我发现对我的工作有帮助的一组函数。我有一个特定的函数get_data(),它读取一个 CSV 文件并清理它(它是一个人类可读但完全不整洁的数据集)。该函数对其进行清理并使数据整洁(例如,将 Invoice 转换为整洁的数据集)。

问题

每次我编译包并测试函数get_data()时,R 都会以某种方式运行该函数的旧版本。我已经手动逐一运行了函数中的行,代码的结果没有错误并返回预期的整洁数据集。get_data()但是,如果我在控制台中调用已编译的,则会调用版本的函数。

笔记

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

pkgbuild::find_rtools()返回TRUE

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

预期成绩

get_data()在控制台/脚本中调用的新编译版本。

任何提示,尝试的想法表示赞赏。谢谢!

4

1 回答 1

2

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

TL;博士

在目录中查找包的所有实例.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_all其他包中的所有函数都不会公平地对待后续 s。也许有一种方法可以跟踪函数/命名空间的搜索路径。

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

于 2019-11-21T20:05:00.580 回答