【问题标题】:Function call built from a custom R package returns the result of an older version of the function从自定义 R 包构建的函数调用返回旧版本函数的结果
【发布时间】:2020-03-17 16:55:42
【问题描述】:

我通常会做一个标准的 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() 的新编译版本将在控制台/脚本中调用。

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

【问题讨论】:

  • 你说你建造它。你真的安装了新版本吗?
  • @Dason 是的,在 RStudio > Build > Clean and Rebuild,然后我 Build > Install and Restart
  • 你是如何重新编译包的,你是如何测试功能的?你得到的这些步骤的确切输出是什么?没有任何可重现的例子,几乎不可能说出可能发生的事情。
  • 我不知道这是否适用于您的工作流程,但是当我遇到类似的问题时,我发现我之前已经devtools::install'd 包并且没有更新它。即使我随后使用devtools::load_all,我也不确定所有R 实例将始终使用load-all'd 版本。查找先前安装的软件包的路径(来自.libPaths())并移动/删除错误路径可能会有所帮助。
  • @r2evans 谢谢你的工作。我按照您的建议使用了.libPaths(),从库目录中删除了myTools,重新构建,重新安装。在职的!随时发表您的评论作为解决方案,我会将其标记为官方(如果需要)

标签: r build package rtools


【解决方案1】:

从您描述工作流程的方式来看,这似乎应该已经解决,但由于我是 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 不会被其他包中的所有函数公平对待。也许有一种方法可以跟踪函数/命名空间的搜索路径。

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

【讨论】:

    猜你喜欢
    • 2018-04-16
    • 2013-01-05
    • 1970-01-01
    • 2017-03-11
    • 2019-05-06
    • 1970-01-01
    • 2012-12-19
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多