Hoe gebruik je meerdere versies van hetzelfde R-pakket?

Om twee versies van een pakket te kunnen vergelijken, moet ik kunnen kiezen welke versie van het pakket ik laad. Het pakketsysteem van R is standaard ingesteld om bestaande pakketten te overschrijven, zodat u altijd over de nieuwste versie beschikt. Hoe overschrijf ik dit gedrag?

Mijn gedachten tot nu toe zijn:

Ik zou de pakketbronnen kunnen krijgen, de beschrijvingen kunnen bewerken om verschillende namen te geven en in feite twee verschillende pakketten kunnen bouwen. Ik zou echter liever rechtstreeks met de binaire bestanden kunnen werken, omdat het veel minder gedoe is.

Ik hoef niet per se beide versies van de pakketten tegelijkertijd te hebben geladen (alleen ergens op hetzelfde moment geïnstalleerd). Ik zou misschien kunnen rommelen met Sys.getenv('R_HOME')om de plaats te wijzigen waar R de pakketten installeert, en dan .libpaths()om de plaats te veranderen waar R zoekt ze op. Dit lijkt echter hacky, dus heeft iemand betere ideeën?


Antwoord 1, autoriteit 100%

U kunt het bibliotheekpad selectief wijzigen. Voor volledige transparantie houdt u beide buiten uw gebruikelijke pad en doet u dat

library(foo, lib.loc="~/dev/foo/v1")    ## loads v1

en

library(foo, lib.loc="~/dev/foo/v2")    ## loads v2

Hetzelfde werkt natuurlijk voor install.packages(). Al deze commando’s hebben een aantal argumenten, dus de hooks waar je naar streeft kunnen al aanwezig zijn. Kijk dus niet naar het wijzigen van R_HOME, maar kijk liever naar help(install.packages)(ervan uitgaande dat u vanaf de bron installeert).

Maar AFAIK, je kunt hetzelfde pakket niet twee keer onder dezelfde naam laden.


Antwoord 2, autoriteit 31%

Er zijn vele jaren verstreken sinds het geaccepteerde antwoord, dat natuurlijk nog steeds geldig is. Het is misschien de moeite waard om een ​​paar nieuwe opties te noemen die zich in de tussentijd hebben voorgedaan:

Meerdere versies van pakketten beheren

Voor het beheren van meerdere versies van pakketten op projectniveau (directory), kan de tool packrathandig zijn: https://rstudio.github.io/packrat/. In het kort

Packrat verbetert uw projectdirectory door uw pakketafhankelijkheden erin op te slaan, in plaats van te vertrouwen op uw persoonlijke R-bibliotheek die wordt gedeeld door al uw andere R-sessies.

Dit betekent in feite dat elk van uw projecten zijn eigen “privébibliotheek” kan hebben, geïsoleerd van de gebruikers- en systeembibliotheken. Als je RStudio gebruikt, is packratheel netjes geïntegreerd en gemakkelijk te gebruiken.

Aangepaste pakketversies installeren

In termen van het installeren van een aangepaste versie van een pakket, zijn er veel manieren, misschien wel de handigste is het gebruik van de devtoolspakket, voorbeeld:

devtools::install_version("ggplot2", version = "0.9.1")

Als alternatief, zoals gesuggereerd door Richie, is er nu een lichter pakket genaamd remotesdat is een resultaat van de decompositie van devtools in kleinere pakketten, met zeer vergelijkbaar gebruik:

remotes::install_version("ggplot2", version = "0.9.1")

Meer informatie over het onderwerp is te vinden:


Antwoord 3

Ik heb nu al lang met r gewerkt en het is maar vandaag dat ik hierover dacht. Het idee kwam uit het feit dat ik begon met Python en de eerste stap die ik moest doen, was om te beheren wat ze (Pythonistas) ‘virtuele omgevingen’ oproepen. Ze hebben zelfs toegewijde hulpmiddelen voor deze schijnbaar belangrijke taak. Ik heb mezelf meer geïnformeerd over dit aspect en waarom ze het zo serieus nemen. Ik besefte eindelijk dat dit een nette en belangrijke manier is om verschillende projecten met conflicterende afhankelijkheden te beheren. Ik wilde weten waarom R deze functie niet heeft en vond dat eigenlijk het concept van ‘omgevingen’ in r bestaat, maar niet geïntroduceerd aan nieuwkomers zoals in Python. U moet dus de documentatie hierover controleren en het zal uw probleem oplossen.
Sorry voor het wandelen, maar ik dacht dat het zou helpen.

Other episodes