如何在 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 版本,并保留以前的版本? 的相关文章

  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 将数据框中重叠的范围合并到唯一的组中

    我有一个 n 行 3 的数据框 df lt data frame start c 178 400 983 1932 33653 end c 5025 5025 5535 6918 38197 group c 1 1 2 2 3 df sta
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o
  • 在 r 中的 group_by 之后建模后取消列表列的嵌套

    我想对所有组进行线性回归group by 将模型系数保存在列表列中 然后使用 unnest 扩展列表列 这里我用的是mtcars以数据集为例 注 我想用do here becausebroom tidy 不适用于所有型号 mtcars gt
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win

随机推荐