软件包存储库的子目录结构是否从R 2.15.2开始更改?

时间:2012-10-31 11:03:48

标签: r repository cran

有点令人尴尬/不禁,但由于我已经从“纯粹的用户”转变为“初学者 - 开发者”并没有那么久,我从未真正阅读过CHANGELOG版本出来了 - 直到今天(我觉得我应该把它作为习惯); - )

然而,我不确定所谓的改变是否真的发生了,因为我在第一次看到R R 2.15.2的CHANGELOG时找不到任何关于它的信息:

实际问题

软件包存储库的(子目录)结构是否可能从

更改

./bin/windows/contrib/2.xx/

./src/contrib/2.xx/甚至是./src/contrib

或者至少PACKAGES文件现在需要住在这里:./src/contrib/PACKAGES

背景信息

最高版本2.15.1,以下路径用于从我的本地软件包存储库安装软件包:

path.repos  <- "L:/R/packages"
repos       <- file.path("file://", path.repos)

函数contrib.urlrepos并将其展开到正确的子目录:

> contrib.url(repos)
[1] "file:///L:/R/packages/bin/windows/contrib/2.15"

但是当我尝试运行install.packages()时,我得到R 2.15.2的以下错误:

> install.packages("mypkg", 
+     lib=file.path(R.home(), "library"),
+     repos=repos,
+     type="win.binary"
+ )
Error in read.dcf(file = tmpf) : cannot open the connection
In addition: Warning message:
In read.dcf(file = tmpf) :
  cannot open compressed file 'L:/R/packages/src/contrib/PACKAGES', probable reason 'No such file or directory'
> 

当我对R 2.15.1做同样的事情时,一切顺利。

尽职调查

CHANGELOG中有一些关于存储库的引用,但是我发现的唯一部分给了我一些证据,证明所发生的假设是这样的:

  

包装安装

     
    

对于Windows或Mac OS X二进制包安装,install.packages()将检查源包是否在同一存储库中可用,并报告它是否是更高版本或是否有源包但没有二进制包可用。

  

再次看一下official documentation,并认为arg type可能没有正确传递给contrib.url(),因为我认为install.package()正在寻找在type="source"包裹的地方?

1 个答案:

答案 0 :(得分:2)

此特定错误与mine不同。

此问题与现在在安装之前运行的检查install.packages()有关。正如拉普斯特所说,tries to find a source package to compare the binary version with

  

对于Windows或Mac OS X二进制包安装,install.packages()将检查源包是否在同一存储库中可用,并报告它是否是更高版本或是否有源包但没有二进制包可用。

因此,压缩此消息的一种简单方法是创建R/src/contrib目录并在该目录中运行tools::write_PACKAGES()以创建(空)PACKAGES文件。

当然,您在2.15.1中没有收到此消息的原因是它不执行2.15.2执行的检查(参见上面的R NEWS引用)。

我已提交bug report个问题。还没有消息。也可以将它发布到R邮件列表。