从自定义 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_all
s 不会被其他包中的所有函数公平对待.也许有一种方法可以追踪 functions/namespaces.
的搜索路径
所以最重要的是,确保你没有通过 R 的包搜索机制找到任何陈旧的安装 (.libPaths()
)。
我通常做一个标准的 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_all
s 不会被其他包中的所有函数公平对待.也许有一种方法可以追踪 functions/namespaces.
所以最重要的是,确保你没有通过 R 的包搜索机制找到任何陈旧的安装 (.libPaths()
)。