Безбожний спосіб встановлення нової версії 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.