R

来自 ArchWiki

来自 "什么是 R?",摘自 R FAQ

R 是一个用于统计计算和图形的系统。它由一种语言以及一个运行时环境组成,该环境具有图形、调试器、对某些系统函数的访问权限以及运行存储在脚本文件中的程序的能力。

安装

安装 r 软件包。在 R 环境中安装外部软件包可能需要 gcc-fortran

用法

要启动 R 会话,请打开终端并键入以下命令

$ R
注意
  • 请确保命令使用大写 “R”。请注意,某些 shell 使用小写 r 命令来重复上次输入的命令。进入 R 会话后,提示符将更改为 >
  • site 在 R 文档中指的是 系统范围

运行 ?Startup 以阅读有关系统文件配置的文档,help() 用于在线帮助,help.start() 用于 HTML 浏览器界面帮助,demo() 用于一些演示,q() 用于关闭会话并退出。

关闭会话时,系统将提示如下

Save workspace image? [y/n/c]:

工作区 是您当前的工作环境,包括任何用户定义的对象、函数。保存的镜像是以 .RData 格式存储的,下次启动 R 时将自动重新加载。您可以随时使用 save.image(image.RData) 命令手动保存工作区,并根据需要保存多个镜像(例如:image1.RDataimage2.RData)。您可以在会话的任何时候使用 load.image(image.RData) 命令加载镜像。

提示
  • 可以使用 --quiet 选项在不显示详细启动消息的情况下启动 R。将 alias R="R --quiet" 添加到启动文件以默认使用此行为。
  • 从命令行运行 R 会将 R 的工作目录设置为当前目录。打开 R GUI 会将 R 的工作目录设置为 $HOME,除非在您的配置文件(.Renviron.Rprofile)中明确定义。

配置

每次 R 启动时,其配置都由多个文件控制。请参阅 R 会话启动时的初始化,以详细了解启动过程。

环境

R 首先加载 siteuser 环境变量 文件。站点文件的名称由环境变量 R_ENVIRON 控制(如果存在),默认为 /etc/R/Renviron.site。用户文件的名称由 R_ENVIRON_USER 指定。如果未设置,则默认为当前工作目录中的 .Renviron(如果存在),否则为 ~/.Renviron

最重要的变量可以在 环境变量 R 文档 中找到。

您可以使用 --no-environ 禁用加载环境变量文件

Renviron 文件中的行应该是以 # 开头的注释行,或者是 name=value 形式的行。以下是一个非常基本的 .Renviron

.Renviron
R_HOME_USER = /path/to/your/r/directory
R_PROFILE_USER = ${HOME}/.config/r/.Rprofile
R_LIBS_USER = /path/to/your/r/library
R_HISTFILE = /path/to/your/filename.Rhistory
MYSQL_HOME = /var/lib/mysql

或者,可以通过 R 会话中的 Sys.setenv() 函数设置环境变量。例如,要将时区 (TZ) 环境变量设置为 "Europe/London"

> Sys.setenv(TZ="Europe/London")
提示: 通常,R 一旦耗尽系统的物理内存,就会抛出 “out of memory” 错误。在您的 .Renviron 文件中设置 “maximal vector heap size” (R_MAX_VSIZE) 环境变量,使 R 能够使用更多系统的总(物理 + 虚拟)可用内存。设置的值可以是提供字节数的数值,例如 16000000000,也可以是带有 ISO 单位后缀的数值,例如 16GB

配置文件

然后,R 加载 .Rprofile 文件,其中包含要执行的 R 代码。这些文件按以下优先级顺序读取(仅加载一个文件)

  1. 由环境变量 R_PROFILE_USER 指定的文件。
  2. 当前工作目录中的 .Rprofile 文件。
  3. $HOME/.Rprofile.

.Rprofile 文件可以包含任意 R 代码,但最佳实践建议不要在启动时加载软件包,也不要执行任何会阻碍软件包升级和可重复性的代码。

~/.Rprofile
# The .First function is called after everything else in .Rprofile is executed
.First <- function() {
  # Print a welcome message
  message("Welcome back ", Sys.getenv("USER"),"!\n","Working directory is: ", getwd())
}

# Set default browser
options(browser = "firefox")
# Number of digits to print. Default is 7, max is 15
options(digits = 12)
# Penalty applied to inhibit the use of scientific notation
options(scipen = 2)
# Do not show stars indicating statistical significance in model outputs
options(show.signif.stars = FALSE)
local({
    # Detect the number of cores available for use in parallelisation
    n <- max(parallel::detectCores() - 2L, 1L)
    # Compile the different sources of a single package in parallel
    Sys.setenv(MAKEFLAGS = paste0("-j",n))
    # Install different packages passed to a single install.packages() call in parallel
    options(Ncpus = n)
    # Parallel apply-type functions via 'parallel' package
    options(mc.cores =  n)
})
# Post-mortem debugging facilities
error <- quote(dump.frames("${R_HOME_USER}/testdump", TRUE))

您可以添加更多 全局选项 来自定义您的 R 环境。请参阅此 帖子,了解更多用户配置示例。

区域设置

区域设置的各个方面可以通过 R 会话中的函数 Sys.getlocaleSys.localeconv 访问。区域设置将是系统中定义的区域设置。

管理 R 软件包

CRAN 软件包存储库 CRAN package repository 上有许多附加的 R 软件包可供浏览。

使用 pacman

AUR 上提供了一些带有 r- 前缀的软件包。

注意: 某些 R 软件包链接到系统软件包提供的文件。当这些文件更新时,需要重新安装这些软件包。

您可以混合搭配使用 pacman 和 R(见下文)安装 R 软件包,但如果您这样做,您应该让 pacman 管理系统软件包(位于 /usr/lib/R/library 中的软件包),并让 R 管理其他地方用户安装的软件包(例如 ~/R/library)。

desolve 存储库还提供了一组预构建的 R 软件包。如有请求,请参阅存储库的 Git 存储库

使用 R

可以使用 install.packages(c("pkgname")) 命令从 R 内部安装软件包。

默认情况下,软件包将安装在与 .libPaths() 返回的第一个元素对应的目录中,而 .libPaths() 又默认为环境变量 R_LIBS_USER 的值。

您可以使用 install.packages 的 `lib` 参数更改软件包将安装到的目录。

您应该使用本地库,并让 pacman 管理位于 /usr/lib/R/library 下的文件。

注意

您可以通过运行以下命令禁用图形弹出窗口

> options(menu.graphics=FALSE)
要使此更改永久生效,请将上述命令添加到您的 Rprofile。

在您的 R 会话中,运行以下命令以检查您的用户库是否存在且设置正确

> Sys.getenv("R_LIBS_USER")
[1] "/path/to/directory/R/packages"

或者,您可以从命令行安装,如下所示

$ R CMD INSTALL -l $R_LIBS_USER pkg1 pkg2 ...

升级 R 软件包

在 R 会话中
> update.packages(ask=FALSE)

或者,当您还需要重建为旧版本构建的软件包时

> update.packages(ask=FALSE, checkBuilt=TRUE)

或者,当您还需要选择特定的镜像 (https://cran.r-project.org.cn/mirrors.html) 以从中下载软件包时(根据需要更改 URL)

> update.packages(ask=FALSE, checkBuilt=TRUE, repos="https://cran.ma.imperial.ac.uk/")
提示: 如果您在启动时加载了太多软件包,从 R 会话升级软件包可能会很快变得很痛苦。为了升级软件包,它们不能被加载,因此不要从您的 Rprofile 加载软件包。
在 shell 中

您可以使用 r 自带的 Rscript 从 shell 更新软件包

$ Rscript -e "update.packages()"

Makevars

Makevars 文件可用于在安装软件包时设置默认的 make 选项。以下是一个优化的 Makevars 文件示例

~/.R/Makevars
CFLAGS=-O3 -Wall -pedantic -march=native -mtune=native -pipe
CXXFLAGS=-O3 -Wall -pedantic -march=native -mtune=native -pipe

替代 shell

作为默认 R 程序的替代方案,以下 shell 也可用

  • radian — R 程序的替代控制台,具有多行编辑和丰富的语法高亮显示。
https://github.com/randy3k/radian || radianAUR

为 R 添加图形前端

R 不包含用于统计或数据操作的点击式图形用户界面。但是,R 的第三方用户界面是可用的,例如 R Commander 和 Rattle。

R Commander 前端

R Commander(CRAN 仓库) 是一个流行的 R 用户界面。没有可用于安装 R Commander 的 Arch Linux 软件包,但它是一个 R 软件包,因此可以从 R 内部轻松安装。R Commander 需要 tk安装

要安装 R Commander,请从命令行运行 R。然后键入

> install.packages("Rcmdr", dependencies=TRUE)

这可能需要一些时间。

然后,您可以使用 library 命令从 R 内部启动 R Commander

> library("Rcmdr")

Rattle 前端

本文或章节已过时。

原因: 似乎上游现在正在推广使用 Flutter 重写的 RattleNG。(在 Talk:R 中讨论)

Rattle (CRAN 仓库) 是一个流行的 R 用户界面,专注于数据挖掘。没有可用的 Arch Linux 软件包,但可以从 R 内部轻松安装。GUI 依赖于 gtk2

要安装 Rattle,请从命令行运行 R。然后键入

> install.packages("rattle", dependencies=TRUE)

这可能需要一些时间。

然后,您可以使用 library 命令从 R 内部启动 Rattle

> library("rattle")
> rattle()

JASP

jasp-desktop 提供了一个菜单驱动的界面,用于使用 R 作为后端的常见统计分析。Flatpak 软件包也可用

jamovi

jamovi (jamovi-gitAUR) 提供了一个菜单驱动的界面,用于使用 R 作为后端的常见统计分析。Flatpak 软件包也可用

支持 R 的编辑器、IDE 和笔记本

RKWard IDE

RKWard 是由 KDE 开发的 IDE,它允许数据导入和浏览,以及运行常见的统计测试和绘图。您可以从官方 Arch 存储库安装 rkward

RStudio IDE

RStudio 是一个开源 R IDE。它包含许多现代便利功能,例如括号匹配、制表符补全、工具提示帮助弹出窗口和类似电子表格的数据查看器。

安装 rstudio-desktop-binAUR

R 库路径通常使用 R_LIBS 环境变量配置。RStudio 忽略此变量,因此用户必须在 ~/.Renviron 中设置 R_LIBS_USER,如上所述。

RStudio 默认使用四窗格布局。但是,如果仅任务栏和工具栏位于原本空白屏幕的垂直顶部可见,请使用提升的权限创建以下文件,并使用如下所示的内容填充它

/usr/lib/qt/libexec/qt.conf
[Paths]
Prefix = /usr/lib/qt
Data = /usr/share/qt
Translations = /usr/share/qt/translations

重启 RStudio 并观察具有四个窗格的预期分屏布局。请参阅 Stack Overflow 上的 RStudio does not show any panehttps://github.com/rstudio/rstudio/issues/5961 以获取更多信息。

如果在启动时,RStudio 向您抛出以下错误

/usr/lib/rstudio/resources/app/bin/rsession: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

您需要安装 openssl-1.1 软件包。

RStudio server

RStudio Server 使您能够为在远程 Linux 服务器上运行的 R 版本提供基于浏览器的界面。

安装 rstudio-server-gitAUR。两个主要的配置文件是 /etc/rstudio/rserver.conf/etc/rstudio/rsession.conf。它们在安装期间未创建,因此您需要创建编辑它们。有关配置选项的信息,请参阅 RStudio 入门 文档。

要启动服务器,请启用并启动软件包提供的 rstudio-server.service 单元文件。

Emacs Speaks Statistics

Emacs 用户可以通过 emacs-essAUR 软件包与 R 交互。

Nvim-R 和 R.nvim

nvim-rAUR 软件包通过包含 R markdown (.Rmd) 文件的编辑和渲染、在单独的窗格中执行 R 代码、检查变量和集成的帮助窗格,帮助 vim 用户用 R 编写代码。

neovim 用户应改用 R.nvim

Cantor

cantor 是由 KDE 开发的笔记本应用程序,其中包括对 R 的支持。

Visual Studio Code

Visual Studio Code (code) 编辑器具有 对 R 的插件支持

Jupyter notebook

Jupyter 是一个基于浏览器的笔记本,支持多种编程语言。可以通过安装 IRkernel 添加 R 支持。

Architect

Architect 是一个集成开发环境 (IDE),专门关注数据科学家的需求。安装 architectAUR

Radiant

Radiant 是一个独立于平台的基于浏览器的界面,用于在 R 中进行商业分析,基于 Shiny 软件包。

安装 r-radiant.dataAUR

技巧和窍门

优化软件包

r 软件包附带的数值库(lapack 以及随后的 blas)不具备多线程功能。将参考 blas 软件包替换为优化的 BLAS 可以显着提高 R 中许多常见计算的速度。有关潜在速度提升的概述,请参阅以下线程

要了解 R 正在使用哪些数值库,请在 R 会话中调用 sessionInfo()extSoftVersion()

OpenBLAS

openblas 可以替换参考 blas

本文或章节已过时。

原因: 如果安装了 openblas,R 似乎不再自动使用它。(在 Talk:R 中讨论)

如果您使用的是 extra 存储库中的常规 r 软件包,则无需进一步配置;R 配置为使用系统 BLAS,并在安装 OpenBLAS 后使用 OpenBLAS。

如果这不起作用,请使用 ropenblas 软件包编译、安装和使用最新版本的 openblas

install.packages("ropenblas")
ropenblas::ropenblas()

Intel MKL

如果您的处理器是 Intel,则可以使用 Intel Math Kernel Library。MKL 除了具有多线程功能外,还针对 Intel 处理器进行了特定优化。

警告: 使用 Intel MKL 可能会 可能干扰并行处理的标准 R 功能
警告: 以前版本的 Intel MKL 存在错误,并且 可能导致数值不稳定和错误的结果

请先安装 intel-oneapi-mkl,然后安装 r-mklAUR 软件包。

注意
  • 如果您在已安装 R 的情况下安装 r-mkl 软件包,系统将提示您删除 R。安装 r-mkl 后,请在 R 控制台上运行以下命令
> update.packages(checkBuilt=TRUE)
  • 以下是使用默认 GCC 构建和 icc/MKL 构建计算 15 个测试的经过时间(秒):GCC 构建为 274.93 秒,icc/MKL 构建为 21.01 秒。有关更多信息,请参阅 此帖子

Intel Advisor

Intel Advisor 通过 C、C++ 和 Fortran 编译器、库和分析工具提供顶级的应用程序性能。

安装 intel-advisor-standaloneAUR 软件包。

在 R 会话中设置 CRAN 镜像

您可以将镜像设置在 .Rprofile 文件中,而不是每次安装或更新软件包时都让 R 询问要使用哪个 CRAN 镜像。https://cloud.r-project.org/ 应该是一个适用于任何地方的良好默认值,因为它会重定向到您最近的 CRAN 镜像

~/.Rprofile
## Set CRAN Mirror:
local({
  r <- getOption("repos")
  r["CRAN"] <- "https://cloud.r-project.org/"
  options(repos = r)
})

禁止 “Save workspace image?” 提示

在 R 中执行 q() 退出时,您通常会看到以下提示

> q()
Save workspace image? [y/n/c]:

从表面上看,这似乎很方便,但使用工作区镜像会降低代码的可移植性。“Save workspace image?” 提示可以通过创建一个隐藏环境 (.env) 来禁用,在该环境中向其添加一个新版本的 q() 函数,其中 save 参数的默认值已更改为 "no",然后附加隐藏环境。这将屏蔽 R 的 base 软件包的 q() 函数,从而有效地关闭提示。要使此更改永久生效,请将以下代码添加到您的 .Rprofile 文件中

~/.Rprofile
## Create hidden environment
.env <- new.env()

## Define new q() function
.env$q <- function(save = "no", ...) {

  quit(save = save, ...)

}

## Attach hidden environment
attach(.env, warn.conflicts = FALSE)

上述操作将使 q() 在退出 R 时不显示提示,但它不会影响使用 Ctrl+D 退出。

如果您永远不想看到保存工作区提示,则使用 --no-save 启动 R 会更方便。将 alias R="R --no-save" 添加到例如 .bashrc 以使更改持久生效。

从 shell 运行 R

本文或章节需要扩充。

原因: 提及 Rscript 作为替代方案,因为它显然比旧的 R CMD BATCH [1] 更受青睐。“R 导论” 的说法则相反 [2]。最好直接链接到 “R 导论”,而不是在此处重复信息。(在 Talk:R 中讨论)

运行以下命令以从命令行 shell 执行 R 代码

$ R CMD BATCH script.R

此命令将返回一个 .Rout 文件,其中包含来自 script.R 的结果。.Rout 文件将始终在末尾包含一个 proc.time() 调用作为基准。可以将 sessionInfo() 添加到 R 代码的末尾,以保留软件包和版本的记录。

安装 V8 包

本文或章节已过时。

原因: r-v8AUR 怎么样?[3](在 Talk:R 中讨论)

要安装 V8 R 软件包,您需要在系统上安装 V8 引擎

为此,您可以安装 v8AUR 软件包(警告:从源代码编译,编译时间长)。

故障排除

无法加载 stringi.so

当运行依赖于 stringi CRAN 软件包的 R 代码时,可能会遇到以下错误

unable to load shared object 'R_LIBS_USER/stringi/libs/stringi.so':
libicui18n.so.MAJOR: cannot open shared object file: No such file or directory

这通常发生在库(由 icu 提供)的 soname 发生 bump 之后。stringi 将需要在 R 中重建,方法是再次安装软件包

参见