Могу ли я получить URL-адрес того, что будет использоваться install.packages? - PullRequest
0 голосов
/ 17 сентября 2018

При запуске install.packages("any_package") на окнах я получаю сообщение:

пробный URL

'somepath.zip'

Я бы хотел получить этот путь без загрузки, это возможно?

Другими словами, я хотел бы получить ссылку CRAN на двоичный файл Windows последней версии (на самом деле лучше всего было бы иметь возможность вызывать новую функцию с такими же параметрами, как у install.packages, и получать правильный URL-адрес). (s) в качестве выхода).

Мне нужен способ, который работает с консоли R (без ручной проверки страницы CRAN и т. Д.).

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вот пара функций, которые соответственно:

  • получают последнюю версию R с веб-сайта RStudio
  • получают URL-адрес последнего выпущенного двоичного файла Windows

Первый вариант кода, который я нашел в пакете 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"
0 голосов
/ 17 сентября 2018

Я не уверен, что это то, что вы ищете.Это строит 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)
...