2009-09-09 2 views
128

Andrew Gelman recently lamented the lack of an easy upgrade process for R (возможно, более актуальным для Windows, чем Linux). Кто-нибудь имеет хороший трюк для выполнения обновления, от установки программного обеспечения до копирования всех настроек/пакетов?Безболезненный способ установить новую версию R?

Это предложение содержалось в комментариях и является тем, что я использовал недавно. Во-первых вы устанавливаете новую версию, а затем запустить это в старом Verion:

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

Насколько актуальным является решение, которое использовалось здесь? – maj

+0

Я использовал его недавно и отлично работает. – Litwos

+0

https://stackoverflow.com/questions/13656699/update-r-using-rstudio – Masoud

ответ

62

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

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. Но этот код легко расширяется, чтобы включить их.

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

+0

+1 Отличный ответ. – Shane

+0

+1 Очень полезно, спасибо! Я просто использовал это для обновления до 2.13 ... –

+2

@Prasad: Thx. Ответ немного устарел, хотя R 2.12 и далее автоматически сохраняет пакеты, которые вы устанавливаете где-то в стандартной библиотеке за пределами основного дерева R. Поэтому все, что вам нужно сделать, это убедиться, что вы нашли эту библиотеку и ссылку на нее, если это не произошло само по себе. –

25

Два быстрых советов:

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

  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" 
+0

Интересно, что передача пакетов с, скажем, с R 2.8 до R.9 вызывает какие-либо проблемы? Или все будет хорошо, пока вы будете делать update.packages в новой версии? –

+0

Я занимаюсь этим довольно долго и не испытываю проблем. R обычно является «совместимым с переходом». И IIRC только одно обновление (возможно, было R 1.9 -> R 2.0) требовало пересоздания всех библиотек. –

+0

Это очень приятно знать. Благодаря! –

21

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

Или 'update.packages (checkBuilt = TRUE)' – Marek

+17

Или 'update.packages (checkBuilt = TRUE, ask = FALSE) ':-P –

3

По предложению Дирка, вот некоторые R код, чтобы сделать это на окнах: How to easily upgrade R on windows XP

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

+0

Для самых последних версий R, Tal имеет пакет под названием' installr', который автоматизирует этот процесс (в настоящее время только в Windows) http://www.r-statistics.com/tag/installr/ или https : //github.com/talgalili/installr/ –

2

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

  1. Реализовать мой ответ here
  2. Если вы используете R под Eclipse, с StatET, открытые Run Configurations, нажмите на Консоль вкладка и в поле под названием R snippet run после запуска добавьте эту строку с вашим выбором каталога: .libPaths("C:/R/library")
1

Принятый ответ может работать, если у вас есть предвидение, но я уже избавился от старой версии, поэтому не смог следовать этим указаниям. Ниже описаны шаги, описанные ниже, для обновления ОСО от 2.1 и 3.1.

UPDATED: Чтобы получить каталог для вашей последней версии (вместо ввода в 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) 
31

Это старый вопрос, конечно, но может быть новым простым ответом, который Я только что нашел.

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

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

More info on {installr} here.

Simon

+1

Что относительно пакетов, установленных через github? – skan

+3

Следует отметить, что это для Windows. – beroe

0

для меня эта страница хорошая https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ или другой вариант просто установить новую опцию и в финале вы поставите, например, в окнах в моем компьютере

.libPaths (с ( «D: /Documents/R/win-library/3.2», «C:/Program Files/R/R-3.2.3/library», «C:/Program Files/R/R-3.2.0/библиотека ", " D: /Documents/R/win-library/2.15 " )

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

4

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

Это решило мою проблему, спасибо! Этот вопрос может казаться немного глупым, но могу ли я удалить старые библиотеки? –

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. Работала отлично. Я не проверял, ВСЕ ли все пакеты функционируют нормально. Но те, что я проверил, работают отлично. Надеюсь, что этот хак работает для всех.

Cheers.

Смежные вопросы