从源安装时获取包名称

时间:2014-02-08 18:19:54

标签: r package

我知道您可以使用以下内容从源代码安装.tar.gz或.zip。

install.packages(SOURCE_FILE, repos = NULL, type="source")

我希望能够确定正在安装的软件包的名称。例如,我们可以下载这个惊人的包:https://github.com/Dasonk/findPackage/tarball/master?download

这会给我们一个名为Dasonk-findPackage-61907b1.tar.gz的.tar.gz。我们实际上可以将其重命名为beep.tar.gz并仍然安装为:

 install.packages("beep.tar.gz", repos=NULL, type="source")

如何获取已安装的实际包名称。我以为我可以使用capture.output,但这似乎也不起作用。因此,在使用install.packages之后,我想知道"findPackage"刚安装完毕。

2 个答案:

答案 0 :(得分:1)

我讨厌这个但是我能想到的就是:

package_name <- function(package) {
    temp <- tempdir()
    untar(package, exdir = temp)
    out <- c(read.dcf(list.files(temp, pattern="DESCRIPTION", 
        recursive=TRUE, full.names=TRUE), "Package"))
    unlink(temp, recursive = TRUE, force = FALSE)
    out
}

package_name("beep.tar.gz")

答案 1 :(得分:0)

如果您愿意安装软件包,那么我认为最简单的方法就是在获取已安装软件包之前和之后的列表:

# Grab previously installed packages
start.packages <- installed.packages()[,1]

# Install your new package
install.packages("beep.tar.gz", repos=NULL, type="source")

# Find all new packages
setdiff(installed.packages()[,1], start.packages)

明显的缺点是您需要安装新软件包,并且您还将获得所有新安装的依赖项。