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

StackOverflow https://stackoverflow.com/questions/1401904

  •  05-07-2019
  •  | 
  •  

Вопрос

Эндрю Гельман недавно посетовал на отсутствие простого процесса обновления 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)
Это было полезно?

Решение

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

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

Другие советы

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

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

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

Дополнительную информацию о {installr} можно найти здесь..

Саймон

Два быстрых предложения:

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

  2. Не устанавливайте библиотеки в «дереве файлов» установленной версии 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. Например, личный пакет или пакет, загруженный с сайта, не принадлежащего CRAN.

Мой предпочтительный метод в Windows (обновление 2.10.1 до 2.11.0):

<Ол>
  • Установите R-2.11.0
  • Скопируйте R-2.10.0 / library / * в R-2.11.0 / library /
  • Ответ " нет " на запросы, спрашивающие, можно ли перезаписать.
  • Старт R 2.11.0
  • Запустите команду 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.)

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

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

    Следуя совету Дирка, вот код R для этого в Windows: Как легко обновить R в Windows XP

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

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

    <Ол>
  • Реализовать мой ответ здесь
  • Если вы используете 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\3.2 к C:\Path\to\packa\R\win-library\3.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 "/" 
    

    (добавьте | pbcopy в конец, чтобы скопировать его прямо в буфер обмена Mac)

    Затем в R вы можете вставить созданную переменную. Как только это будет определено в новой версии 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: /докаменты/р/win-library/3.2", "c:/program files/r/r-3.2.2.3/библиотека", "c:/program files/r/r-3.2 .0/библиотека "," D: /докаментов/r/win-library/2.15 ")

    Каждый путь последней версии в моем случае, который я всегда стараюсь первым путем,-это «d: /documents/r/win-library/3.2». мой саудж просто назовите это

    linux + bash + debian + apt пользователи:

    <Ол>
  • Если вы устанавливаете / обновляете до последней версии R , то мы можем предположить, что у вас есть права root . (Не существенно, просто делает процесс намного проще; для согласованности приведенный ниже скрипт использует sudo для всех установок.) Поскольку пакеты R также устанавливаются root , их можно размещать в / usr / local / .

  • Приведенный ниже вызов curl предполагает, что вы уже заинтересованы в выпуске sid R , самой последней версии нестабильная версия (как требуется при сборке / проверке пакета R ), т.е.

    cat /etc/apt/sources.list | grep 'sid' || выход 1

    хотя это можно легко заменить недавним стабильным выпуском, например <Код> попойка .

  • Обратите внимание, что я не использую ключ , как обычно рекомендуется . Это не является обязательным, особенно если (как в следующем скрипте) мы устанавливаем пакеты внутри R ( Rscript -e ниже). Кроме того, такие ключи имеют тенденцию ломаться / меняться каждые несколько лет. Таким образом, вы, конечно, можете добавить следующее предисловие в файл R.sh , которое выглядит следующим образом:

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

  • Массив из R пакетов явно не является исчерпывающим, но приводит некоторые примеры, которые я лично считаю полезными. Новая установка / обновление с пакетом debian r-рекомендуемая , как показано ниже, должен предоставлять самую последнюю версию всех стандартных «рекомендуемых» пакетов (например, выживание ). Я полагаю, что между выпуском CRAN и обновлением соответствующего пакета debian может быть небольшое отставание. Таким образом, вы можете добавить некоторые из них в array ниже, если необходима последняя версия «рекомендуемого» пакета R .

  • пакеты debian , установленные в приведенном ниже процессе, также не являются ни необходимыми (для использования r-base ), ни исчерпывающими, но предоставляют нет из дополнений, которые важны для разумного нет. 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 , поэтому, возможно, проще всего запустить их в одночасье ...

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top