是否有一个函数将路径扩展到包含包二进制文件的实际子目录(或者在Linux和Mac OS中调用的等价物),给出了类似于 OS-中本地存储库根目录的类似URL的路径独立方式?
相关链接
假设您在L:/my_repo
下有一个存储库:
path.repo <- "L:/my_repo"
MS Windows需要某个子目录结构:
path.sub <- file.path("bin/windows/contrib", paste(version$major,
gsub("(?<=\\d)\\.\\d", "", version$minor, perl=TRUE), sep=".")
)
实际创建存储库:
dir.create(file.path(path.repo, path.sub), recursive=TRUE, showWarnings=FALSE)
存储库中存在包二进制文件后,需要创建存储库的索引:
setwd(file.path(path.repo, path.sub))
tools::write_PACKAGES(".", type="win.binary")
之后,存储库很方便,你可以通过
安装它的软件包install.packages(“mypackage”,repos = file.path(“file://”,path.repo))
到目前为止,这么好。我想创建一个函数,在构建包二进制文件后自动将包二进制文件复制到本地存储库。为了做到这一点,我想我需要检索包含二进制文件和两个索引文件(PACKAGES' and
PACKAGES.gz`)的实际目录的路径。这应该以独立于操作系统的方式发生,以使其尽可能通用。
当然我可以通过
搜索索引文件unique(dirname(grep("PACKAGE*", list.files(path.repo, recursive=TRUE,
full.names=TRUE), value=TRUE)))
但我想知道是否有更好的方法。
答案 0 :(得分:1)
这是我到目前为止所提出的。它借鉴了contrib.url()
:
expandPathRepos=function(
path,
type="win.binary",
vsn=paste(version$major, gsub("(?<=\\d)\\.\\d", "",
version$minor, perl=TRUE), sep="."),
...
) {
if (!type %in% c("source", "mac.binary", "win.binary")) {
stop(paste("Invalid type: '", type, "'", sep=""))
}
out <- switch(unlist(type),
source=paste(gsub("/$", "", path),
"src", "contrib", sep = "/"),
mac.binary=paste(gsub("/$", "", path), "bin", "macosx",
mac.subtype, "contrib", ver, sep="/"),
win.binary=paste(gsub("/$", "", path),
"bin", "windows", "contrib", vsn, sep = "/")
)
return(out)
}
expandPathRepos(path="L:/R")
[1] "L:/R/bin/windows/contrib/2.14"
还有其他想法吗?