Bezbolesny sposób na zainstalowanie nowej wersji R?

Andrew Gelman ubolewał ostatnio nad brakiem łatwego procesu aktualizacji dla R (prawdopodobnie bardziej istotnego w systemie Windows niż Linux). Czy ma ktos dobry trick do robienia upgrade ' u, od instalacji oprogramowania do kopiowania wszystkich ustawien/pakietów?

Ta sugestia została zawarta w komentarzach i jest tym, z czego korzystam ostatnio. Najpierw instalujesz nową wersję, a następnie uruchamiasz ją w starej wersji:

#--run in the old version of R
setwd("C:/Temp/")
packages <- installed.packages()[,"Package"]
save(packages, file="Rpackages")

Następnie w nowej wersji:

#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)
Author: Uwe, 2009-09-10

10 answers

Tylko dla kompletności, są pewne sposoby, aby zapobiec temu problemowi. Jak powiedział Dirk, Zapisz swoje pakiety w innym katalogu na komputerze.

install.packages("thepackage",lib="/path/to/directory/with/libraries")

Możesz zmienić domyślną wartość .Library za pomocą funkcji .libPaths również

.libPaths("/path/to/directory/with/libraries")

Spowoduje umieszczenie tej ścieżki jako pierwszej wartości w zmiennej .Library i uczyni ją domyślną.

Jeśli chcesz zautomatyzować to dalej, możesz określić to w pliku Rprofile.plik strony, który znajdziesz w katalogu / etc/ twojego r build. Wtedy ładuje się automatycznie za każdym razem, gdy ładuje się R i nie musisz się już o to martwić. Możesz po prostu zainstalować i załadować pakiety z podanego katalogu.

Wreszcie, mam mały kod zawarty w moim Rprofile.strona pozwalająca mi ponownie zainstalować wszystkie pakiety po zainstalowaniu nowej wersji R. Musisz je tylko wymienić zanim zaktualizujesz do nowej wersji R. Robię to za pomocą an .Plik RData zawierający zaktualizowaną listę ze wszystkimi paczki.

library(utils)

## Check necessary packages
load("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"
installed <- pkgs %in% installed.packages()[, 'Package']
if (length(pkgs[!installed]) >=1){
  install.packages(pkgs[!installed])
}

Robię listę pakietów.RData poprzez podanie .Last() w moim Rprofile.miejscu. To aktualizuje listę pakietów, jeśli zainstalowałem niektóre :

.Last <- function(){
  pkgs <- installed.packages()[,1]
  if (length(pkgs) > length(installed)){
    save(pkgs,file="G:\Setinfo\R\packagelist.RData")
  }
}

Kiedy instaluję nową wersję R, po prostu dodaję niezbędne elementy do Rprofile.plik witryny i wszystkie pakiety są ponownie instalowane. Muszę dostosować Rprofile.site anyway (używając kontrastów sumarycznych, dodając dodatkowy kod do Tinn-R, te rzeczy), więc nie jest to naprawdę dodatkowa praca. Instalacja wszystkich pakietów wymaga dodatkowego czasu na nowo.

Ten ostatni bit jest odpowiednikiem tego, co jest podane w pierwotnym pytaniu jako rozwiązanie. Po prostu nie muszę się martwić o pierwsze uzyskanie listy "zainstalowanych".

Ponownie, to nie działa bez zarzutu, jeśli masz pakiety, które nie są zainstalowane z CRAN. Ale ten kod można łatwo rozszerzyć, aby również te.

Edit: w kodzie brakowało nawiasu

 65
Author: Joris Meys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-01 23:27:44

Jest to oczywiście stare pytanie, ale może być nowa łatwa odpowiedź (działa tylko dla Windows), którą właśnie znalazłem.

install.packages("installr")
require(installr)
updateR()

Najlepszym sposobem na to jest system RGui. Wszystkie twoje pakiety zostaną przeniesione do nowego folderu, a stare zostaną usunięte lub zapisane (możesz wybrać jeden z nich). Po ponownym otwarciu RStudio natychmiast rozpoznaje, że używasz zaktualizowanej wersji. Dla mnie to działało jak urok,

Więcej informacji na temat {installr} tutaj .

Simon

 33
Author: SJDS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-13 23:41:14

Dwie szybkie sugestie:

  1. Użyj plików Batchfiles Gabora, które zawierają narzędzia pomagające np. w relokacji bibliotek. Zastrzeżenie: nie używałem ich.

  2. Nie instaluj bibliotek w 'pliku' zainstalowanej wersji R. Na Windows, mogę umieścić R w C:/opt/R/R- $ version ale umieść wszystkie biblioteki w C:/opt/R/library / użycie poniższego fragmentu, ponieważ łagodzi problem w pierwszym miejsce:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"
 26
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-15 19:27:13

Metoda sugerowana powyżej nie będzie całkowicie działać, jeśli masz pakiety, które nie są z CRAN. Na przykład pakiet osobisty lub pakiet pobrany ze strony innej niż CRAN.

Moja preferowana metoda Na Windows (Aktualizacja 2.10.1 do 2.11.0):

  1. Install R-2.11.0
  2. skopiuj R-2.10.0/library/* do R-2.11.0/library/
  3. Odpowiedz " nie " na monity z pytaniem, czy można zastąpić.
  4. Start R 2.11.0
  5. Uruchom polecenie R update.packages()
 22
Author: Kevin Wright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-01 21:29:40

W odniesieniu do rozwiązania podanego w pytaniu, uruchomienie starszej wersji R może nie być łatwe, jeśli masz już zainstalowaną nową wersję. W takim przypadku możesz ponownie zainstalować wszystkie brakujące pakiety z poprzedniej wersji R w następujący sposób.

# Get names of packages in previous R version
old.packages <- list.files("/Library/Frameworks/R.framework/Versions/3.2/Resources/library")

# Install packages in the previous version. 

# For each package p in previous version...
    for (p in old.packages) {
      # ... Only if p is not already installed
      if (!(p %in% installed.packages()[,"Package"])) {
        # Install p 
        install.packages(p) 
      }
    }

(zauważ, że argument list.files() w pierwszej linii kodu powinien być ścieżką do katalogu biblioteki dla twojej poprzedniej wersji R, gdzie znajdują się wszystkie foldery pakietów z poprzedniej wersji. W moim obecnym przypadku jest to "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". Będzie inaczej, jeśli poprzednia wersja R nie jest 3.2 lub jeśli używasz systemu Windows.)

Instrukcja if upewnia się, że pakiet jest a nie zainstalowany, Jeśli

  • jest już zainstalowany w nowej wersji R, lub
  • został zainstalowany jako zależność od pakietu zainstalowanego w poprzedniej iteracji pętli for.
 5
Author: Raffaele Vacca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-08 11:47:45

Zgodnie z sugestią Dirka, oto kod R do zrobienia tego na windows: Jak łatwo uaktualnić R na windows XP

Update( 15.04.11): napisałem kolejny post na ten temat, wyjaśniając jak radzić sobie z typowymi problemami Upgrade R w windows 7

 3
Author: Tal Galili,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-15 08:14:38

Dwie opcje:

  1. zaimplementuj moją odpowiedź tutaj
  2. Jeśli używasz R pod Eclipse ze Statetem, otwórz Uruchom konfiguracje, Kliknij naConsole i w polu o nazwie R snippet Uruchom po uruchomieniu dodaj tę linię z wybranym katalogiem: .libPaths("C:/R/library")
 2
Author: Fred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:23

Jestem na Windows 8 i z jakiegoś dziwnego powodu, nigdy nie mogę zainstalować pakietów za pomocą moich połączeń internetowych.

Generalnie instaluję go za pomocą .plik zip z CRAN.

Po przejściu z R 3.2.5 na R 3.3.1.

Po prostu skopiowałem pakiety z

C:\Path\to\packa\R\win-library\3.2 do C:\Path\to\packa\R\win-library\3.3.

I ponownie uruchomiłem sesję R. Zadziałało idealnie. Nie sprawdzałem, czy wszystkie pakiety działają dobrze. Ale te, które sprawdziłem działają doskonale. Mam nadzieję, że ten hack działa dla wszystkich.

Zdrówko.
 1
Author: Pragyaditya Das,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-13 09:26:37

Przyjęta odpowiedź może zadziałać, jeśli masz dalekowzroczność, ale już pozbyłem się starej wersji, więc nie byłem w stanie podążać za tymi wskazówkami. Opisane poniżej kroki działały dla aktualizacji OSX z 2.1 i 3.1.

UPDATED: aby pobrać katalog dla Twojej ostatniej wersji (zamiast wpisywać w 3.1 lub 3.2) możesz użyć poniższych poleceń. Druga konwertuje bezpośrednio do zmiennej R, pomijając . i .. i .DS_Store, Użyj:

OLD=$(ls -d /Library/Frameworks/R.framework/Versions/*.* |tail -n 2 | head -n 1)Resources/library/
echo "packages = c(\"`ls $OLD | tail +4| paste -s -d ',' - | sed -E 's|,|\",\"|'g`\")" | tr -d "/"

Następnie w obrębie R Możesz wklej wygenerowaną zmienną (dodaj |pbcopy do końca, aby skopiować ją bezpośrednio. Po zdefiniowaniu w nowej wersji R, możesz przechodzić przez zainstalowane pakiety z powyższych instrukcji...

for (p in setdiff(packages, installed.packages()[,"Package"]))
   install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE)
 1
Author: beroe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-01 19:02:13

Dla mnie ta strona jest dobra https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ lub inną opcją jest po prostu zainstaluj nową opcję i w końcu umieścić, na przykład w windows w moim komputerze

.libPaths (c( "D:/Documents/R/win-library/3.2", "C:/Program Files/R/R-3.2.3 / library", "C:/Program Files / R/R-3.2.0/library", "D:/Documents/R/win-library/2.15" )

Każda ścieżka ostatniej wersji w moim przypadku zawsze umieszczam pierwszą ścieżkę jest "D:/Documents/R/win-library/3.2" to jest naprawione a potem wstawiam drugi, ponieważ nie trzeba kopiować ani przenosić żadnych pakietów, w moim sugest po prostu nazwij to

 0
Author: juanprimate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-10 20:31:47