Безбожний спосіб встановлення нової версії R?


158

Ендрю Гелман нещодавно скаржився на відсутність простого процесу оновлення для R (можливо, більш актуального для Windows, ніж для Linux). Хтось має хороший трюк для оновлення: від встановлення програмного забезпечення до копіювання всіх налаштувань / пакетів?

Ця пропозиція містилася в коментарях і є тим, що я використовував останнім часом. Спочатку встановіть нову версію, а потім запустіть її у старій версії:

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

Слідом за цим в новій версії:

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

1
Наскільки сучасним є рішення, яке тут було використано?
— майор

Я використовував його недавно і чудово працює.
— Літва

Відповіді:


74

Просто для повноти існують кілька способів запобігти вам виникнення цієї проблеми. Як сказав Дірк, збережіть ваші пакунки в іншому каталозі на комп’ютері.

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

Ви можете змінити за замовчуванням .Libraryзначення з допомогою функції .libPathsзанадто

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

Це поставить цей шлях як перше значення в .Libraryзмінній і зробить його за замовчуванням.

Якщо ви хочете додатково автоматизувати це, ви можете вказати це у файлі Rprofile.site, який ви знайдете у каталозі / etc / у вашій збірці R. Тоді він завантажується автоматично щоразу, коли R завантажується, і вам більше не доведеться турбуватися про це. Ви можете просто встановити та завантажити пакунки з вказаного каталогу.

Нарешті, у мене на Rprofile.site включений невеликий код, який дозволяє мені перевстановити всі пакунки, коли я встановлюю нову версію R. Вам потрібно просто перерахувати їх перед оновленням до нової версії R. Я роблю це, використовуючи .RData файл, що містить оновлений список з усіма пакетами.

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])
}

Я роблю Packagelist.RData, вказавши .Last()в своєму Rprofile.site. Це оновить список пакетів, якщо я встановив деякі:

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

Коли я встановлюю нову версію R, я просто додаю необхідні елементи до файлу Rprofile.site і всі пакунки перевстановлюються. Я все-таки повинен коригувати Rprofile.site (використовуючи контрастну суму, додаючи додатковий код для Tinn-R, ці речі), так що це не дуже потрібна робота. Просто потрібен додатковий час для встановлення всіх пакетів заново.

Цей останній біт еквівалентний тому, що подано в оригінальному питанні як рішення. Мені просто не потрібно турбуватися про те, щоб спочатку отримати "встановлений" список.

Знову ж таки, це не працює бездоганно, якщо у вас є пакети, не встановлені з CRAN. Але цей код легко розширити, щоб включити і ці.


2
@Prasad: Thx. Однак відповідь трохи застаріла, R 2.12 і надалі автоматично зберігає пакети, які ви встановлюєте десь у стандартній бібліотеці поза основним деревом R. Отже, все, що вам потрібно зробити зараз, це переконатися, що ви знайдете цю бібліотеку та посилання на неї, якщо це не відбулося само собою.
— Joris Meys

@ 428790: Де я можу знайти ту бібліотеку, яку ви згадуєте?
— Даніель Кризіян

@DanielKrizian Подивіться на стандартний внутрішній об'єкт за замовчуванням .Library. У моєму випадку вона вказує на папку установки R, якщо вона не змінилася (що мені особливо не подобається, але добре)
— Joris Meys

42

Це, звичайно, старе питання, але, можливо, з’явився новий простий відповідь (працює лише для Windows), який я щойно знайшов.

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

Найкращий спосіб зробити це за допомогою системи RGui. Усі ваші пакети будуть перенесені у нову папку, а старі будуть видалені або збережені (ви можете вибрати будь-яку). Після того, як ви знову відкриєте RStudio, він відразу визнає, що ви використовуєте оновлену версію. Для мене це спрацювало як шарм,

Більше інформації про {installr} тут .

Саймон


2
Що з пакетами, встановленими через github?
— скан

8
Слід зазначити, що це для Windows.
— beroe

27

Дві швидкі пропозиції:

  1. Використовуйте пакетні файли Gabor, які, як кажуть, містять інструменти, що допомагають, наприклад, з цим масовим переїздом бібліотеки. Caveat: Я їх не використовував.

  2. Не встановлюйте бібліотеки у "filetree" встановленої версії R. У Windows я можу поставити R у версію C: / opt / R / R- $, але розмістити всі бібліотеки у C: / opt / R / library /, використовуючи наступний фрагмент, оскільки це усуває проблему в першу чергу:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"

Цікаво, чи перенесення пакетів з, скажімо, R 2,8 на R 9 викликає якісь проблеми? Або все буде добре, якщо ви будете вносити оновлення.пакетів у новій версії?
— Едуардо Леоні

Я цим займаюся досить довгий час і не мав проблем. R, як правило, "сумісний вперед". І лише для одного оновлення IIRC (можливо, це було R 1,9 -> R 2,0) потрібно було відновити всі бібліотеки.
— Дірк Еддельбуеттель,

5
Зазвичай я просто копіюю свою папку «Бібліотека» в нову інсталяцію та запускаю update.packages. Здається, працює добре. Факультативна папка встановлення, однак, набагато елегантніша.
— kpierce8

Просто наголошу - я додав відповідь із кодом R, який виконує пропозицію Дірка (для користувачів R windows)
— Тал Галілі

26

Запропонований вище метод не буде повністю працювати, якщо у вас є пакети, які не є CRAN. Наприклад, особистий пакет або пакет, завантажений з сайту, який не є CRAN.

Мій бажаний метод у Windows (оновлення 2.10.1 до 2.11.0):

  1. Встановіть R-2.11.0
  2. Скопіювати R-2.10.0/library/*вR-2.11.0/library/
  3. Відповідь "ні" на запити, запитуючи вас, чи правильно перезаписати.
  4. Початок R 2.11.0
  5. Виконайте команду R update.packages()

7

Щодо рішення, поданого у запитанні, запустити старішу версію R може бути непросто, якщо ви вже встановили нову версію. У цьому випадку ви все одно можете перевстановити всі відсутні пакети з попередньої версії R наступним чином.

# 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) 
      }
    }

(Зауважте, що аргументом list.files()у першому рядку коду має бути шлях до каталогу бібліотеки для вашої попередньої версії R, де є всі папки пакунків у попередній версії. У моєму випадку це так "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". Це буде інакше, якщо попередня версія R не має 3.2, або якщо ви працюєте в Windows.)

ifЗаява засвідчується , що пакет НЕ встановлено , якщо

  • Він уже встановлений у новій версії R, або
  • Встановлено як залежність від пакета, встановленого в попередній ітерації forциклу.

Це вирішило моє питання, дякую! Це питання може звучати трохи глухо, але чи можна видалити старі бібліотеки?
— m_c

4

Після пропозиції Дірка, ось якийсь код R, щоб зробити це на Windows: Як легко оновити R на Windows XP

Оновлення (15.04.11): я написав ще один допис на цю тему, пояснюючи, як вирішувати поширені проблеми оновлення R на Windows 7


2
Для останніх версій R Tal має пакет під назвою, installrякий автоматизує цей процес (наразі лише в Windows) r-statistics.com/tag/installr або github.com/talgalili/installr
— Louis Maddox

1
Запуск Rgui.exe з C: \ Program Files \ R \ R-3.6.0 \ Bin \ i386 і писати код на консоль: install.packages(installr); library(installr); updateR(TRUE). Наприкінці [1] TRUEз'являється. За відмінним пакетом Галілі я перейшов від R 3.6.0 до R 3.6.1 дуже легко. Дякую Талю.
— Ердоган ЦЕВЕР

2

Два варіанти:

  1. Реалізуйте тут мою відповідь
  2. Якщо ви використовуєте R під Eclipse зі StatET, відкрийте Запустити конфігурації , натисніть на вкладку Консолі та у полі під назвою R фрагмент після запуску додайте цей рядок за вибором каталогу:.libPaths("C:/R/library")

1

Я перебуваю в Windows 8 і з якихось дивних причин я ніколи не можу встановлювати пакети, використовуючи мої інтернет-з'єднання.

Я зазвичай встановлюю його за допомогою .zip-файлу з CRAN.

Після переходу від R 3.2.5 до R 3.3.1.

Я просто скопіював пакунки з

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

А потім я перезапустив сеанс R. Працювали чудово. Я не перевіряв, чи всі пакети працюють добре. Але те, що я перевірив, працює чудово. Сподіваюсь, цей хакер працює для всіх.

Ура.


1

Прийнята відповідь може спрацювати, якщо у вас є передбачення, але я вже позбувся старої версії, тому не зміг виконувати ці вказівки. Описані нижче кроки працювали для оновлення OSX з 2.1 та 3.1.

ОНОВЛЕНО: Щоб отримати каталог для останньої версії (замість того, щоб вводити 3.1 або 3.2), ви можете скористатися командами нижче. Другий звернені безпосередньо до R-змінної, пропустивши .і ..та .DS_Store, використання:

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 "/" 

(Додайте |pbcopyдо кінця, щоб скопіювати його безпосередньо у буфер обміну Mac)

Тоді в межах R ви можете вставити ту генерацію змінної. Після того, як це визначено в новій версії R, ви можете переглядати встановлені пакети з наведених вище інструкцій ...

for (p in setdiff(packages, installed.packages()[,"Package"]))
   install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE)

0

для мене ця сторінка хороша https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ або інший варіант просто встановити новий варіант і, нарешті, ви ставите, наприклад, у Windows на моєму ПК

.libPaths (c ("D: /Documents/R/win-library/3.2", "C: / Файли програми / R / R-3.2.3 / бібліотека", "C: / Файли програми / R / R-3.2" .0 / бібліотека "," D: /Documents/R/win-library/2.15 ")

кожен шлях останньої версії в моєму випадку я завжди ставлю перший шлях - "D: /Documents/R/win-library/3.2", який фіксується, а потім я ставлю інший, тому що вам не потрібно копіювати чи переміщувати будь-які пакунки, в мій сугест просто так називаю


0

linux+ bash+ debian+ aptкористувачів:

  1. Якщо ви встановлюєте / модернізуєте до новітньої версії R, то, можливо, ми можемо вважати, що у вас є rootдозволи. (Не важливо, він просто робить процес набагато простішим; для послідовності сценарій нижче використовується sudoдля всіх встановлень.) Оскільки Rпакети також встановлені root, таким чином, допустимо розміщувати їх /usr/local/.

  2. Дзвінок curlнижче передбачає, що ви вже зацікавлені у sidвипуску Rнайновішої нестабільної версії (як вимагається під час складання / перевірки Rпакета), тобто

    cat /etc/apt/sources.list | grep 'sid' || exit 1

    хоча це можна легко замінити останнім стабільним випуском, наприклад buster.

  3. Зауважте, що я не використовую ключ, як це зазвичай рекомендується . Це не суттєво, особливо якщо (як у наступному сценарії) ми встановлюємо пакети всередині R себе ( Rscript -eнижче). Також такі клавіші мають тенденцію ламатися / змінюватися кожні кілька років. Таким чином, ви, звичайно, можете додати наступний передмову до файлу, R.shякий наступний:

    sudo apt-key adv --keyserver keyserver.ubuntu.com \ --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

  4. arrayЗ Rпакетів явно не є вичерпним , але дає деякі приклади , які я особисто вважаю корисним. Свіжа установка / оновлення debianпакета r-recommended, як показано нижче, має містити останню версію всіх стандартних "рекомендованих" пакетів (наприклад survival). Я вважаю, що між випуском CRAN та оновленням відповідного debianпакету може бути незначне відставання . Таким чином, ви можете додати деякі з них arrayнижче, якщо наявність останньої версії "рекомендованого" Rпакета є необхідною.

  5. В debianпакети , встановлені в процесі нижче, також ні істотним (для використання r-base) та НЕ є вичерпним , але забезпечити NO. "доповнень", важливих для розумного відсутності. з Rпакетів.

У будь-якому випадку ... помістіть таке R.sh:

sudo apt update && sudo apt --yes full-upgrade
sudo apt install --yes libappstream4 curl
### ov1 = online version; lv1 = local version (i.e. currently installed)
ov1=$(curl --silent --url https://packages.debian.org/sid/r-base |
    grep 'meta name=\"Keywords\"' |
    grep --only-matching '[0-9].*[0-9]') ; echo $ov1
## command -v = print a description of COMMAND similar to the `type' builtin
## && = if prior command succeeds, then do; || = if prior fails, then do
command -v 'R --version' &&
    lv1=$(R --version |
              grep --only-matching '[0-9\.]*[0-9]' |
              ## || = otherwise
              head -1) ||
        lv1=0
## 'lt' = less than
if dpkg --compare-versions "$lv1" 'lt' "$ov1" 
then ## declare -a = indexed array
     declare -a deb1=('r-base' 'r-base-dev' 'r-recommended')
     for i in "${deb1[@]}"
     do sudo apt install --yes "$i"
     done
fi
### certain Debian packages are required by 'R' so best have these first
sudo apt install --yes ccache libcairo2-dev libxml2-dev libcurl4-openssl-dev \
     libssl-dev liblapack-dev libssl-dev
declare -a pkg1=('data.table' 'ggplot2' 'knitr' 'devtools' 'roxygen2')
## installing as 'root' so these are installed in
Rscript -e ".libPaths()[1]"
for i in "${pkg1[@]}"
do sudo Rscript -e "install.packages('$i', dependencies=TRUE)"
done
### other useful additions
sudo apt install --yes libblas-dev libboost-dev libarmadillo-dev \
     jags pandoc pandoc-citeproc 
sudo apt update && sudo apt full-upgrade

Потім виконати його, наприклад , припускаючи в каталозі вже: source R.sh.

Установка пакетів (незалежно від того debianчи R) один за іншим в циклі з оболонки кілька неефективно, але допускає просте відстеження помилок, ІМХО. Може зайняти деякий час залежно від ні. з Rпакетів, так що, можливо , самий простий , щоб дозволити працювати на ніч ...


1
Не впевнений, чому в цьому списку додаткових пакетів знаходиться «виживання». (І цілком можливо, я ввожу в оману цей баш сценарій.) Це були "рекомендовані" пакети з ... назавжди. Якщо ви не встановлюєте всі рекомендовані пакети з цим сценарієм, його слід змінити для цього. Також подумайте, що набір пакетів r-base-devel знадобиться всім, хто використовує Linux. А чому б не додати PPA Майкла Руттера?
— IRTFM

Дякую! Оновлено у світлі ваших корисних коментарів. Погодьтеся, не потрібно регулярно встановлювати пакет, який вже є r-recommended. 'r-base-devel' відомий як r-base-dev( debianпакет) - вже був включений. Я не проти використовувати ключ для захисту (відповідь оновлена). Відповідь ухиляється від використання архівівPPA = Персональний пакет, оскільки вони залежать від необхідності однієї людини і, таким чином, можуть бути помилковими. Як каже сам Майкл Руттер (2012): "Якщо ви використовували CRAN, то немає ніяких причин для переходу на PPA, оскільки однакові пакети надаються в обох місцях".
— dardisco
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.