从自定义R包生成的函数调用返回函数的旧版本的结果

从自定义R包生成的函数调用返回函数的旧版本的结果,r,build,package,rtools,R,Build,Package,Rtools,我通常做一个标准的reprex,所以张贴,冲洗和重复,但这是一个很难复制的。我会尽量描述我的问题 背景 我试图在R中构建一个自定义包,我简单地称之为,myTools。构建运行时没有错误,所有函数都正常工作(+/-我需要改进一些东西)。这只是我发现在我的工作中有用的函数的集合。我有一个特殊的函数get_data(),它读取一个CSV文件并将其清除(这是一个可读的、但完全不整洁的数据集)。该函数将其清理并使数据整洁(例如,想象一张发票变成一个整洁的数据集) 问题 每次我编译包并测试函数get_dat

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

背景 我试图在R中构建一个自定义包,我简单地称之为,
myTools
。构建运行时没有错误,所有函数都正常工作(+/-我需要改进一些东西)。这只是我发现在我的工作中有用的函数的集合。我有一个特殊的函数
get_data()
,它读取一个CSV文件并将其清除(这是一个可读的、但完全不整洁的数据集)。该函数将其清理并使数据整洁(例如,想象一张发票变成一个整洁的数据集)

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

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

pkgbuild::find_rtools()
返回
TRUE

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

预期结果 要在控制台/脚本中调用的新编译版本的
get_data()


如有任何提示和想法,请尝试。谢谢大家!

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

TL;博士 在
.libPaths()
目录中查找包的所有实例,然后移动或删除它们。再试一次

解释 对我来说,我通常有以下工作流程:

#编写一些代码
devtools::加载所有(“路径/到/包”)
#测试/编码更多
devtools::加载所有(“路径/到/包”)
#等
#时不时
devtools::安装(“路径/到/包”)
#或
install.packages(devtools::build(“path/to/package”))
这最后一部分暂时还可以正常工作(从字面上说……永远不会超过一天)。然而,我发现(不幸的是,不可预测的是,不确定这是否是一个bug或已知的设计特性)当包有一个目录时,其他包中的所有函数都不会公平地对待后续的
load\u all
s。也许有一种方法可以跟踪函数/名称空间的搜索路径


所以,最重要的一点是,确保R的包搜索机制(
.libpath()
)没有找到任何过时的安装。你真的安装了新版本吗?@Dason是的,在RStudio>build>Clean and Rebuild中,然后是I build>install and restart。你到底是如何重新编译软件包的?你到底是如何测试功能的?这些步骤的确切输出是什么?如果没有任何可复制的示例,几乎不可能知道会发生什么。我不知道这是否适用于您的工作流,但当我遇到类似问题时,我发现我以前安装过包,但没有更新它。即使我随后使用了
devtools::load_all
,我也不确定所有的R实例都将始终使用
load all
'd版本。查找以前安装的包的路径(从
.libPaths()
)并移动/删除错误路径可能会有所帮助。@r2evans谢谢您的帮助。我按照您的建议使用了
.libpath()
,从库目录中删除了
myTools
,重建并重新安装。工作请随意发布您的评论作为解决方案,我会将其标记为正式(如果需要)