如何在 Linux (Red Hat/CentOS) 上更新到特定 R 版本,并保留以前的版本?

2024-04-23

也许更准确的标题是:“如何在 Linux (Red Hat/CentOS) 上从就地 (EPEL) R 安装切换到并行(特定于版本)R 安装?

一个(可能是典型的)在 Linux 上升级 R 的故事......

History:

在过去的某个时刻,我使用由 RHEL/CentOS 7 服务器下拉的默认版本更新了 R 版本yum当时的包管理器。例如,sudo yum install R在 2019 年初的某个时候更新到版本 3.5.2。默认情况下,这会将 R 安装在/usr/lib64/R适用于所有用户,并完全替换之前安装的 3.4.x 版本。 Shiny Server 已安装,配置为以用户身份运行shiny,并且它顺利地获取了新版本的 R。

情况:

一年后,现在是时候硬着头皮更新 Linux 服务器上运行的 R 版本了。跑步yum check-upgrade R我发现可用的版本是3.6.0。我实际上想安装 3.6.3 并且不想破坏在 3.5.2 上运行的所有应用程序,因此我需要使用不同的方法。按照位于以下位置的说明进行操作:https://docs.rstudio.com/resources/install-r/ https://docs.rstudio.com/resources/install-r/,我下载了 3.6.3 .rpm 文件并安装它。默认情况下,这会将 R 安装在/opt/R/3.6.3/,保留 3.5.2 版本不变。然而,一旦我完成了创建 R 的符号链接 https://docs.rstudio.com/resources/install-r/#create-a-symlink-to-r步骤,我的闪亮应用程序都不起作用:

sudo ln -s /opt/R/3.6.3/bin/R /usr/local/bin/R  
sudo ln -s /opt/R/3.6.3/bin/Rscript /usr/local/bin/Rscript  

这并不奇怪。我的闪亮应用程序都依赖于尚未为这个新版本的 R 安装的几个 R 软件包。通过删除这些符号链接,我可以快速让我的应用程序在以前的版本 (3.5.2) 上再次运行,直到我安装了新版本中必要的包:

sudo rm /usr/local/bin/R  
sudo rm /usr/local/bin/Rscript 

我闪亮的应用程序日志文件中的错误消息(位于/var/log/shiny-server/<app name>-<user>-<datetime>.log)确认应用程序由于缺少软件包而无法启动。要更新共享库文件夹中的 R 包,我需要以 sudo 运行新版本的 R:sudo -i /opt/R/3.6.3/bin/R并安装必要的软件包,例如install.packages(c("shiny","devtools","rmarkdown","shinydashboard","tidyverse")) in R.

现在 R 包已安装,我可以重新创建符号链接:

sudo ln -s /opt/R/3.6.3/bin/R /usr/local/bin/R  
sudo ln -s /opt/R/3.6.3/bin/Rscript /usr/local/bin/Rscript  

我验证我的应用程序是否可以与新版本的 R 配合使用。

现在我有一些问题:

问题一:完成这些步骤后,R --version仍然返回旧版本(3.5.2)。但是当我第二天重新登录时,它打开了3.6.3。为什么?我需要运行终端命令才能获取R --version立即返回新版本还是打开新的终端窗口是实现此目的的唯一方法?

问题2:跑步sudo R --version始终返回旧版本 (3.5.2)。跑步sudo which R回报/bin/R。跑步more /bin/R显示的内容表明它是“R 可执行文件的 Shell 包装器”。并硬编码了“/usr/lib64/R”路径。我认为目前我不需要这个包装纸。让这些 sudo 命令指向新版本的推荐方法是什么?

我可以在我的主目录中创建该文件的备份副本(例如,cp /bin/R ~/binR.backup)以防万一,然后:

  • 删除/bin/R?
  • 将 /bin/R 替换为新版本的符号链接(例如,sudo ln -s /opt/R/3.6.3/bin/R /bin/R)?
  • 将“旧”版本重新安装到/opt/R/3.5.2/使用 .rpm 的方式与我安装 3.6.3 的方式相同,在那里安装软件包,然后删除/usr/lib64/R版本(例如,sudo yum remove R)?

我看过但没有回答我的问题的类似问题的链接:

  1. 如何在 Linux 中升级 R https://stackoverflow.com/questions/46214061/how-to-upgrade-r-in-linux
  2. 更改 Linux 中的路径 https://stackoverflow.com/questions/28333183/change-path-in-linux
  3. 如何在 Linux 中加载特定版本的 R https://stackoverflow.com/questions/26897335/how-can-i-load-a-specific-version-of-r-in-linux

问题一:我不知道为什么,但是在你的 PATH 上有多个版本的 R 可能会导致像这样的意外情况。/usr/local/bin通常领先于/usr/bin在 PATH 中,所以我希望能找到 R 3.6.3。也许这与问题2有关。

问题2:一些发行版(如 CentOS/RHEL)不放置/usr/local/bin使用 sudo 时默认位于 PATH 上。看https://unix.stackexchange.com/questions/8646/why-are-path-variables- Different-when-running-via-sudo-and-su https://unix.stackexchange.com/questions/8646/why-are-path-variables-different-when-running-via-sudo-and-su了解详情。那里的答案描述了几种添加方法/usr/local/bin使用 sudo 时的 PATH -- 例如,修改secure_path in /etc/sudoers包括/usr/local/bin like:

Defaults    secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

由于 R 3.6.3 在 PATH 中位于默认系统 R 之前,因此您不必删除/bin/R or /usr/bin/R。但最终,我建议以相同的方式安装多个并行版本的 R,使用https://docs.rstudio.com/resources/install-r/ https://docs.rstudio.com/resources/install-r/,因此更容易管理。下次安装新的 R 版本时,只需替换其中的符号链接即可/usr/local/bin。默认系统 R(来自 EPEL)是系统上唯一的 R,具有就地升级功能。

如果您想用并行的 R 3.5.2(或 3.5.3)替换默认的 R 3.5.2,您可以从以下位置安装 R 3.5:https://docs.rstudio.com/resources/install-r/ https://docs.rstudio.com/resources/install-r/,安装所有必需的软件包,并让 Shiny Server 使用新的 R 3.5。然后从 EPEL 卸载 R (R-core or R-core-devel)以完全切换。从那里,您甚至可以创建到 R 的符号链接/usr/bin代替/usr/local/bin,并且不用担心添加/usr/local/bin到 sudo 路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Linux (Red Hat/CentOS) 上更新到特定 R 版本,并保留以前的版本? 的相关文章

  • POSIX:FreeBSD 与 Linux 中的管道系统调用

    在 Linux 2 6 35 22 generic 中 man pipe指出 pipeline 创建一个管道 一个可用于进程间通信的单向数据通道 在 FreeBSD 6 3 RELEASE p5 中 man pipe指出 pipeline
  • 在 R 闪亮应用程序中评级星星

    我正在尝试向我闪亮的应用程序添加一些元素 以使其看起来更好 因此 我正在使用新的shiny semantic包允许以简单的方式添加语义 UI 元素 人们可以在这里找到闪亮的语义元素的示例 http demo appsilondatascie
  • 在 LINUX 上测量 TLB 未命中的命令

    有人可以指导我使用一个命令来测量 LINUX 上的 TLB 未命中吗 是否可以将轻微页面错误视为 TLB 未命中 您可以使用perf去做这个 前提是你的CPU支持 Use perf list了解可用的计数器 当我拿到这个列表并查找 TLB
  • 是否可以允许jenkins访问只有root或某些特定程序可以访问的文件?

    我基本上想做的是允许 jenkins 访问我的 android sdk linux 文件夹和所有子目录 我的老板不想自己更改文件夹的权限 我应该在构建过程中这样做 我见过一些在构建过程中在执行 shell 中运行一些命令的示例 是否可以在该
  • tidyr:在函数内使用 mutate

    我想使用 tidyverse 中的 mutate 函数来基于旧列创建一个新列 仅使用数据框和字符串 代表列标题 作为输入 我可以在不使用 tidyverse 的情况下让它工作 参见下面的函数 f 但我想使用 tidyverse 让它工作 参
  • 获取当前时间(以小时和分钟为单位)

    我正在尝试从系统收集信息 并且需要获取当前时间 以小时和分钟为单位 目前我有 date awk print 4 输出如下 16 18 54 怎样才能把秒数去掉呢 提供格式字符串 date H M Running man date将给出所有格
  • 双边移动平均线?

    如何获得两侧的 移动平均值 该函数对向量右侧和左侧的 n 个数字进行平均 并根据它们与中心值的距离赋予它们权重 我尝试使用 TTR 但它的移动平均线仅从左到右工作 并将最左边的值设置为 NA 所以我不能使用该平滑向量作为 smooth sp
  • 内核如何区分线程和进程

    Linux 中的线程被称为轻量级进程 无论是进程还是线程 它们的实现都是通过task struct数据结构 1 gt 那么 从这个意义上说 内核如何区分线程和进程 2 gt 当发生上下文切换时 线程如何在上下文切换中获得更少的开销 因为在此
  • 使用 R 中的 ggplot2 在分类散点图中添加水平线

    我正在尝试为 3 个组绘制一个简单的散点图 每个组具有不同的水平线 线段 例如 组 a 的 hline 为 3 组 b 的 hline 为 2 5 hline 为组 b c 组为 6 library ggplot2 df lt data f
  • 使用鼠标功能时出错:没有什么可以估算的

    我尝试将 NA 数据填充到数据框中 我做了简单的数据 library mice first lt c 1 2 3 4 5 NA 7 8 9 NA second lt c 1 2 NA 4 5 6 7 NA 9 10 sample data
  • 如果为 null 则替换为 0,否则在同一列中使用默认值

    在SparkR shell 1 5 0中 创建了一个示例数据集 df test lt createDataFrame sqlContext data frame mon c 1 2 3 4 5 year c 2011 2012 2013 2
  • 发布闪亮应用程序时出现问题 - renderWidget(instance) 中的警告:忽略附加内容;不能在闪亮的渲染调用中使用appendContent

    我在尝试发布 Shiny 应用程序时收到以下错误 这是我的第一个应用程序 我在网上搜索无法弄清楚问题是什么 下面的错误消息来自我尝试在线发布时 应用程序的完整代码位于错误消息下方 在笔记本电脑上 该应用程序可以运行 但我无法在shinyap
  • 将复数名词转换为单数名词

    如何使用 R 将复数名词转换为单数名词 我使用 tagPOS 函数来标记每个文本 然后提取所有标记为 NNS 的复数名词 但是如果我想将这些复数名词转换为单数该怎么办 library openNLP library tm acq o lt
  • 如何在 k 均值中使用欧氏距离以外的不同距离公式

    我正在处理纬度经度数据 我必须根据两点之间的距离进行聚类 现在两个不同点之间的距离是 ACOS SIN lat1 SIN lat2 COS lat1 COS lat2 COS lon2 lon1 6371 我想在 R 中使用 k 均值 有什
  • 在 Linux 集群上安装 R `forecast` 包:编译器问题?

    我正在寻找测试性能R 更具体地说是一些例程forecast封装在具有 Intel Xeon Phi 协处理器的 HPC 集群上 据我所知 系统管理员已经建立了R 3 2 5按照英特尔网站上的说明从来源获取 https software in
  • 用于列出用户和组的 Python 脚本

    我正在尝试编写一个脚本 在自己的行上输出每个用户及其组 如下所示 user1 group1 user2 group1 user3 group2 user10 group6 etc 我正在为此用 python 编写一个脚本 但想知道如何做到这
  • 按 data.table 中的所有列进行分组时,.SD 为空

    我无法获得一致的输出data table使用一致的语法 请参阅下面的示例 library data table d lt data table x c 1 1 2 2 y c 1 1 2 2 data table shown below x
  • rpart 绘图文本较短

    我正在使用prp函数从rpart plot包来绘制一棵树 对于像状态这样的分类数据 它给出了一个非常长的变量列表 并且使其可读性较差 如果超过一定长度 有什么方法可以将文本换行为两行或更多行吗 这是一个将长分割标签包装在多个标签上的示例 线
  • R中向后历史搜索

    通常在我的机器中 我可以通过键入我想要向后搜索的命令的所需第一个字符来向后搜索 R 的历史记录 然后使用 PageUp 或 PageDown 键浏览 R 历史记录中的所有条目 我现在在远程集群中以访客身份工作 此选项在本机上不可用 有谁知道
  • Shiny + downloadHandler + Openxlsx 不生成xlsx文件

    我试图通过 Openxlsx 包生成一个 xlsx 文件 其中包含文件内的反应名称和标头 输入变量为 ASL 1 和 Year 1 要保存在文件中的对象是反应表 tab 1 它是由应用程序生成的 没有任何问题 但是当我尝试下载它时 浏览器

随机推荐