在Windows上运行install.packages("any_package")
时,我收到消息:
尝试网址
'somepath.zip'
我想不下载而获得此路径,这可能吗?
换句话说,我想获得CRAN链接到最新版本的Windows二进制文件(最好的办法实际上是能够使用与install.packages
相同的参数来调用新函数并获取适当的网址作为输出)。
我需要一种可以从R控制台运行的方式(无需手动检查CRAN页面等)。
答案 0 :(得分:3)
我不确定这是否是您想要的。这将从存储库信息构建URL,并构建可用软件包列表的文件名。
#get repository name
repos<- getOption("repos")
#Get url for the binary package
#contrib.url(repos, "both")
contriburl<-contrib.url(repos, "binary")
#"https://mirrors.nics.utk.edu/cran/bin/windows/contrib/3.5"
#make data.frame of avaialbe packages
df<-as.data.frame(available.packages())
#find package of interest
pkg <- "tidyr" #example
#ofinterest<-grep(pkg, df$Package)
ofinterest<-match(pkg, df$Package) #returns a single value
#assemble name, assumes it is always a zip file
name<-paste0(df[ofinterest,]$Package, "_", df[ofinterest,]$Version, ".zip")
#make final URL
finalurl<-paste0(contriburl, "/", name)
答案 1 :(得分:1)
以下是几个函数:
第一个是我在installr
软件包中找到的代码的变体。似乎没有干净的方法来获取最新版本,因此我们必须抓取一个网页。
第二个实际上只是对@ Dave2e的代码进行了优化,并将其重构为一个函数(带有针对过时的R版本的修复程序),因此请直接投票给他答案。
get_package_url <- function(pkg){
version <- try(
available.packages()[pkg,"Version"],
silent = TRUE)
if(inherits(version,"try-error"))
stop("Package '",pkg,"' is not available")
contriburl <- contrib.url(getOption("repos"), "binary")
url <- file.path(
dirname(contriburl),
get_last_R_version(2),
paste0(pkg,"_",version,".zip"))
url
}
get_last_R_version <- function(n=3){
page <- readLines(
"https://cran.rstudio.com/bin/windows/base/",
warn = FALSE)
line <- grep("R-[0-9.]+.+-win\\.exe", page,value=TRUE)
long <- gsub("^.*?R-([0-9.]+.+)-win\\.exe.*$","\\1",line)
paste(strsplit(long,"\\.")[[1]][1:n], collapse=".")
}
get_package_url("data.table")
# on my system with R 3.3.1
# [1] "https://lib.ugent.be/CRAN/bin/windows/contrib/3.5/data.table_1.11.4.zip"