R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Apufunktiot uusien pakettien asentamiseen

Kirjoitin aiemmin funktiosta, jolla voi ladata kaikki paketit esimerkiksi CRANin pakettikirjastosta. Uusi githubinstall-paketti kuitenkin laajentaa latausmahdollisuuden Githubinkin puolelle. Tällaista pakettien peilausmahdollisuutta tarvitaan esimerkiksi CRAN-repositoryn perustamiseen tai paikallisen miniCRAN:n perustamiseen.

Paketin githubinstall funktio githubinstall:::gh_update_package_list sisältää linkin tiedostoon, johon Githubissa sijaitsevat R-pakettien sijainnit on kerätty (https://raw.githubusercontent.com/hoxo-m/gepuro-task-views-copy/master/package_list.txt). CRAN:n ja muiden vakio-repositoryjen paketit saadaan selville available.packages() -funktiolla.

Jaoin pakettienlataustoiminnallisuuden kahteen funktioon. Ensimmäinen (downloadUpdatedPackages) lataa paketteja vakiokirjastoista. Toinen (downloadGithubPackages) lataa paketteja Githubista perustuen paketin githubinstall-toiminnallisuuteen. Kumpikin funktio lataa oletusarvoisesti paketit Windows-järjestelmän työpöydälle kansioon packages. Kansion sijaintia voi muuttaa argumentilla path. Funktiolle downloadUpdatedPackages voi määritellä myös paketin tyypin (type = ”win.binary” tai ”source”), ja ladataanko vain kansiossa jo olevia paketteja uudemmat versiot vai kaikki (what = ”new.version”). Funktio downloadGithubPackages puolestaan etsii jo tunnettujen pakettien lisäksi Githubista uusia paketteja asiasanalla ”R”. Tätä voi muuttaa argumentilla term.

Jos halutaan ladata kaikki paketit, jotka funktoilla löytyvät, voidaan funktoita siis kutsua yksinkertaisesti seuraavasti:

downloadUpdatedPackages(type="win.binary") 
downloadUpdatedPackages(type="source") 
downloadGithubPackages()

jolloin ladataan sekä vakiokirjastoista että Githubista Windowsin binääripaketit ja lähdekoodipaketit.

Funktoiden koodi löytyy alta. Funktioilla on riippuvuuksia paketteihin stringr, githubinstall ja data.table. Jos paketteja ei ole asennettu, funktiot asentavat ne automaattisesti ensimmäisen ajokerran yhteydessä.

downloadUpdatedPackages<-function(path=NULL, what="new.version", download=TRUE, type="win.binary") {
 
   if(is.null(path)) {
      if(Sys.info()["sysname"]=="Windows") {
         path<- paste0("C:\\Users\\", Sys.info()["user"], "\\Desktop\\packages")
      } else {
         stop("Polku (path) puuttuu!")
      }
 
      if(!dir.exists(path)) {
         dir.create(path)
      }
   }
   setwd(path)
 
   chooseCRANmirror()
   setRepositories()
 
   if(!any(rownames(installed.packages()) %in% "stringr")) {
      install.packages("stringr")
   }
   library(stringr)
 
   ok<-dir()
   ok2<-str_sub(ok, start=1, end=str_locate(ok, "_")[,1]-1 )
 
   a<-available.packages()
   a2<-paste0(rownames(a), "_", a[,2], ".zip")
   if(what=="new.version") {
      tbi<-rownames(a)[which(!a2 %in% ok)]
   } else {
      tbi<-rownames(a)[!rownames(a) %in% ok2]
   }
   print(tbi)
   Sys.sleep(10)
   if(download) {
      download.packages(tbi, destdir=".", type=type)
   }
 
}
 
 
 
downloadGithubPackages<-function(path=NULL, term="R") {
 
   if(!any(rownames(installed.packages()) %in% "githubinstall")) {
      install.packages("stringr")
   }
   if(!any(rownames(installed.packages()) %in% "data.table")) {
      install.packages("stringr")
   }
 
   library(githubinstall)
   library(data.table)
 
   if(is.null(path)) {
      if(Sys.info()["sysname"]=="Windows") {
         path<- paste0("C:\\Users\\", Sys.info()["user"], "\\Desktop\\packages")
      } else {
         stop("Polku (path) puuttuu!")
      }
 
      if(!dir.exists(path)) {
         dir.create(path)
      }
   }
   setwd(path)
 
   download_url <- "https://raw.githubusercontent.com/hoxo-m/gepuro-task-views-copy/master/package_list.txt"
   package_list <- fread(download_url, sep = "\t", header = FALSE, stringsAsFactors = FALSE, colClasses = c("character", "character", "character"), col.names = c("username", "package_name", "title"), showProgress = FALSE)
   package_list2 <- gh_search_packages(term)
   package_list3<-package_list
   package_list4<-package_list2
 
   package_list$url<-paste0("https://github.com/", package_list$username, "/", package_list$package_name, "/", "archive/master.zip")
   package_list$destname<-paste0(package_list$username, "_", package_list$package_name, ".zip")
 
   package_list2$url<-paste0("https://github.com/", package_list2$username, "/", package_list2$package_name, "/", "archive/master.zip")
   package_list2$destname<-paste0(package_list2$username, "_", package_list2$package_name, ".zip")
 
   package_list3$url<-paste0("https://github.com/", package_list3$username, "/", package_list3$package_name, "/", "archive/master.tar.gz")
   package_list3$destname<-paste0(package_list3$username, "_", package_list3$package_name, ".tar.gz")
 
   package_list4$url<-paste0("https://github.com/", package_list4$username, "/", package_list4$package_name, "/", "archive/master.tar.gz")
   package_list4$destname<-paste0(package_list4$username, "_", package_list4$package_name, ".tar.gz")
 
   pl<-package_list[,c(4,5)]
   pl2<-package_list2[,c(4,5)]
   pl3<-package_list3[,c(4,5)]
   pl4<-package_list4[,c(4,5)]
 
   PL<-rbind(pl3, pl4, pl, pl2)
   PL<-PL[!duplicated(PL),]
 
   for(i in 1:nrow(package_list)) {
      tr<-try(download.file(PL$url[i], destfile=PL$destname[i]))
   }
 
}


Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *