r - 比较 R 包的开发版本

标签 r

简短版本:我正在开发一个 R 包,目前我有一个稳定版本。我有一些更新要进行,并且想将代码的更新版本与相同 R 环境中的稳定版本进行比较。我该怎么做呢?

我是包开发的新手,我怀疑 dev_mode 在这里有用,但 ?dev_mode 没有帮助我。

长版:这是我遇到的主要问题...在包内(我们称它为 somePackage)我有一个函数

foo <- function(x){
    y <- bar(x) # some other function defined inside my package
    y
}

如果我简单地将 somePackage 复制到一个单独的目录中以制作开发版本,然后加载两者,R 现在会看到 bar 的两个副本,这会产生冲突。我无法在同一个 R 环境中运行 foobar 的两个版本。

如果我只有一个函数,我可能会做类似 somePackage::barsomePackage_dev::bar 的事情,但实际上我有几十个函数somePackage 并且进行这些更改将是乏味的,应该是不必要的。

这里的关键是需要在同一环境中运行 foo 的两个版本,这样我就可以快速轻松地比较两个版本在相同输入下的时间和输出。

最佳答案

您可以通过将包命名空间加载到环境中然后附加和分离它们来实现此目的。可以看到my answer here有关此策略的更多信息。但基本上,您可以按照您说的去做,然后使用类似以下内容为两个版本加载命名空间:

x <- loadNamespace('somePackage')
y <- loadNamespace('somePackage_dev')

这会将包 namespace 加载到环境 xy 中,而不将它们附加到搜索路径。然后您可以通过attachdetach 来决定您希望在全局环境中使用哪个版本的包。

这是一个简单的例子来说明它是如何工作的(想象一下 a 是你的包中的一个函数而不是一个常量):

> x <- new.env()
> y <- new.env()
> search()
 [1] ".GlobalEnv"        "package:stats"     "package:graphics" 
 [4] "package:grDevices" "package:utils"     "package:datasets" 
 [7] "package:devtools"  "package:methods"   "Autoloads"        
[10] "package:base"     
> x$a <- 1
> y$a <- 2
> a
Error: object 'a' not found
> x$a
[1] 1
> y$a
[1] 2
> attach(x)
> search()
 [1] ".GlobalEnv"        "x"                 "package:stats"    
 [4] "package:graphics"  "package:grDevices" "package:utils"    
 [7] "package:datasets"  "package:devtools"  "package:methods"  
[10] "Autoloads"         "package:base"
> a
[1] 1
> detach(x)
> a
Error: object 'a' not found
> attach(y)
> search()
 [1] ".GlobalEnv"        "y"                 "package:stats"    
 [4] "package:graphics"  "package:grDevices" "package:utils"    
 [7] "package:datasets"  "package:devtools"  "package:methods"  
[10] "Autoloads"         "package:base" 
> a
[1] 2
> detach(y)
> a
Error: object 'a' not found

关于r - 比较 R 包的开发版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25410116/

相关文章:

r - 将因素映射到数据框

随机森林分类和训练/测试分割

r - 如何在 R 中的 nls(非线性最小二乘法)函数中使用 'weights'?

r - 可以 read_csv 解析 m/d/Y H :M:S AM/PM vector?

r - 为什么我不能在 R 中使用 ifelse 分配函数?

R - stackplot/barplot 随时间变化的比例

r - typeof 为显然是一个因素的东西返回整数

r - 使用符号而不是线型来画线

r - 为 RHadoop 安装 Rhbase 包 : missing "libthrift" error

r - 处理 htmlParse 错误(无法加载 HTTP 资源)