Безболезненный способ установки новой версии R?


Андрей Гельман недавно посетовал на отсутствие простого процесса обновления для 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)
10 135

10 ответов:

просто для полноты, есть несколько способов, чтобы предотвратить вас от этой проблемы. Как сказал Дирк, сохраните ваши пакеты в другой каталог на вашем компьютере.

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

вы можете изменить значение по умолчанию .Library значение с помощью функции .libPaths слишком

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

это поставит этот путь в качестве первого значения в .Library переменная, и сделает его по умолчанию.

если вы хотите автоматизировать это дальше, вы можете указать это в Rprofile.файл сайта, который вы найдете в каталоге /etc/ вашей сборки R. Затем он будет загружаться автоматически каждый раз, когда R загружается, и вам больше не нужно беспокоиться об этом. Вы можете просто установить и загрузить пакеты из указанного каталога.

наконец, у меня есть небольшой код, включенный в мой Rprofile.сайт позволяет мне переустановить все пакеты при установке новой версии 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.сайт. Это обновляет список пакетов, если я установил некоторые :

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

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

этот последний бит эквивалентен тому, что дано в исходном вопросе в качестве решения. Мне просто не нужно беспокоиться о получении "установленного" списка в первую очередь.

опять же, это не работает безупречно, если у вас есть пакеты, которые не установлены из CRAN. Но этот код легко расширяется, чтобы включить и эти.

Edit: в коде отсутствовала скобка

Это старый вопрос, конечно, но там может быть новый простой ответ (работает только для Windows), который я нашел.

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

лучший способ сделать это из системы RGui. Все ваши пакеты будут перенесены в новую папку, а старые будут удалены или сохранены (вы можете выбрать). Затем, как только вы снова открываете RStudio, он сразу же распознает, что вы используете обновленную версию. Для меня это сработало как шарм,

подробнее о {installr} здесь.

Симон

два предложения:

  1. использовать Габора batchfiles которые, как говорят, содержат инструменты, помогающие, например, в этом массовом перемещении библиотек. Предостережение: я их не использовал.

  2. Не устанавливайте библиотеки в пределах 'filetree' установленной версии R. На Windows, я могу поставить R в C:/opt/R/R - $version но Поместите все библиотеки в 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"

метод, предложенный выше, не будет полностью работать, если у вас есть пакеты, которые не из клюквы. Например, персональный пакет или пакет, загруженный с сайта без 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. Start R 2.11.0
  5. выполнить команду R update.packages()

Что касается решения, приведенного в вопросе, может быть нелегко запустить старую версию 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.)

The if оператор гарантирует, что пакет не установлен, если

  • он уже установлен в новой версии R, или
  • был установлен как зависимость от пакета, установленного в предыдущей итерации for петли.

после предложения Дирка, вот некоторые R код, чтобы сделать это на windows:Как легко обновить R на windows XP

обновление (15.04.11): я написал еще один пост на эту тему, объясняя, как для решения общих вопросов обновление R на windows 7

два варианта:

  1. реализовать мой ответ здесь
  2. если вы используете R в Eclipse с StatET, откройте "Выполнить Конфигурации", нажмите кнопку консоль вкладка и в поле под названием R сниппет запускается после запуска добавьте эту строку с вашим выбором каталога:.libPaths("C:/R/library")

Я нахожусь в Windows 8 и по какой-то странной причине я никогда не могу устанавливать пакеты, используя мои интернет-соединения.

Я обычно устанавливаю его с помощью.zip-файл из CRAN.

после того, как я перешел от R 3.2.5 к R 3.3.1.

Я просто скопировал пакеты от

C:\Path\to\packa\R\win-library.2 до C:\Path\to\packa\R\win-library.3.

а затем я перезапустил сеанс R. Работать отлично. Я не проверил, все ли пакеты работают хорошо. Но, те, которые я проверил являются работает отлично. Надеюсь, что этот хак работает для всех.

Ура.

принятый ответ может сработать, если у вас есть предвидение, но я уже избавился от старой версии, поэтому не смог следовать этим указаниям. Шаги, описанные ниже, работали для обновления 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 "/"

затем внутри R вы можете вставить эту переменную, которая создается (добавить |pbcopy до конца, чтобы скопировать его непосредственно. Как только это будет определено в новой версии R, вы можете просмотреть установленные пакеты из приведенных выше инструкций...

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

для меня эта страница-это хорошо 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:/Program файлы/R/R-3.2.3 / библиотека", "C:/Program файлы/R/R-3.2.0 / библиотека", "D:/Documents/R/win-library/2.15" )

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