R for macOS 常见问题解答

下一页: , 上一页: , 上级: (dir)  

R for macOS 常见问题解答

R for macOS 常见问题解答

版本 4.3.1 2023-06-16, R.app 1.79

Stefano M. Iacus
Simon Urbanek
Rob J. Goedman
Brian Ripley



1 简介

本文档包含 R.APP 版本的 R 用户指南,以及在 macOS 上使用 R 的信息,这些信息补充了主要的 R 手册,最新版本可以在 https://cran.r-project.org.cn/manuals.html 找到。

在本文件中,R 指的是核心、基于命令行的 R 系统,而 R.APP 指的是控制底层 R 的基于 GUI 的 Mac OS 应用程序。

这份“R for macOS 常见问题解答”目前还很不完整,需要用户的贡献。任何与 R 语言相关的具体问题可以在 R-FAQ 中找到(参见 https://cran.r-project.org.cn/doc/FAQ/R-FAQ.html)。请将您希望得到解答的任何请求/问题以及对这份 FAQ 的评论发送到 R-SIG-Mac 邮件列表(订阅后)。

本文档的最后一部分包含了最常见的问题,这些问题不严格属于上述任何类别——如果您遇到的问题不属于上述任何类别,或者在特定部分没有得到解答,通常最好先查看该部分。在 R-SIG-Mac 上寻求帮助之前,请务必阅读这份 FAQ!


下一页: , 上一页: , 上级: 简介  

1.1 R for macOS 有多少个版本?

R for macOS 只有一个版本。但是,macOS 上的 R 可以像其他 Unix 系统一样在命令行上使用,也可以通过 R.APP GUI 使用(参见 R.app)。第二种方法是大多数 Macintosh 用户的首选。


1.2 R for macOS 在哪些机器上运行?

64 位英特尔架构的 Mac,即 2008 年年中之后生产的任何机器。

R 4.1.0 开始,有一个单独的版本用于 ARM 架构的 Mac(称为“M1”和“Apple Silicon”),尽管基于英特尔的版本在“Rosetta”模拟下运行良好。


1.3 如何获取和安装 R for macOS?

RCRAN 上以安装程序包的形式提供,其中包含 R 框架和 R.APP GUI。该软件包通常命名为 R.pkg,并可能包含版本号。

安装方法是双击安装程序包。安装程序将引导您完成必要的步骤。请注意,这将需要具有管理员权限的帐户的密码或登录。安装可以自定义,但默认设置适合大多数用户。

R-patched 和 R-devel 版本的快照可在 http://mac.R-project.org/ 上获得,打包方式相同。

更多详细信息,包括卸载和从源代码构建 R,请参见“R 安装和管理手册”。


下一页: , 上一页: , 上级: R for macOS 常见问题解答  

2 R.app

R.APP 是 R 2.0.0 中引入的 macOS GUI 的名称。它显示为一个标有“R”的图标,但为了避免与通用 R 混淆,我们更喜欢使用它在使用 GUI 的“获取信息”时显示的名称:R.APP 这代表“R 应用程序”。

在内部,R.APP 是一个 Cocoa 程序(因此用 Objective C 编写),它链接到作为框架安装的嵌入式 R


下一项: , 上一项: , 上级: R.app  

2.1 如何获取 R.app

R.APP 是 macOS 版 R 二进制发行版的一部分,可从 CRAN 获取。该发行版包含一个包含 R 框架和 R.APP 的软件包。

R.APP 的开发版本每天以磁盘映像的形式提供,其中包含 R.APP 本身。有关如何获取此类快照的详细信息,请参阅 CRAN 上的 macOS 页面(目前位于 http://mac.R-project.org/)。


下一项: , 上一项: , 上级: R.app  

2.2 如何安装 R.app

R.APP 的安装方式与 R 框架相同,即使用 CRAN 上提供的二进制软件包。 CRAN 站点的 bin/macosx 目录包含一个名为 R.pkg 的标准 Apple 安装程序包(可选地包含版本号)。下载并双击软件包图标。

请仔细阅读 CRAN 站点的 bin/macosx 目录中关于使用 tcltk 和 Fortran 的说明。


下一项: , 上一项: , 上级: R.app  

2.3 R 控制台

在本节中,您将找到有关 R.APP 的一般信息。有关可以使用菜单通过 R.APP 完成的特定 R 任务,请阅读以下内容(请参阅 菜单)。


下一项: , 上一项: , 上级: R 控制台  

2.3.1 输入和输出

R 控制台的当前设计是使用一个框架来显示输入(用户)和输出(R)。


下一节: , 上一节: , 上级: R 控制台  

2.3.2 复制和粘贴

复制和粘贴在 R 中与任何其他 Macintosh 应用程序一样。

如果您想要高分辨率图形导出,您可以使用文件/另存为菜单项保存 PDF 格式(参见 Quartz 设备)。或者,您可以通过pdf()jpeg() 等在 R 中使用支持的格式(输入?capabilities 获取更多详细信息)。


下一节: , 上一节: , 上级: R 控制台  

2.3.3 当前和启动工作目录

如果在首选项中没有另行指定(参见 首选项),或者如果指定的路径不再可用,则启动时的默认工作目录是用户主目录。可以使用setwd R 命令或使用杂项菜单项更改工作目录来更改工作目录。最后,可以通过将文件夹拖放到 R.APP 图标上,为单个 R 会话使用特定目录。如果 R.APP 未运行,这将导致 R.APP 在与拖放的文件夹相对应的目录中启动。在命令行上也可以实现相同的效果 - 例如open -a R . 会导致 R.APP 使用当前目录作为启动工作目录启动。

如果您希望由 .Rprofile 定义不同的启动过程,此功能很有用;您可以在特定目录中编辑 .Rprofile(包含您的个人初始化 R 命令),并使用首选项(或上述任何其他方法)更改启动目录。下次您启动 R.app 时,.Rprofile 会在启动时被 R 读取并执行。这相当于在 Unix(或命令行)上从不同目录启动 R


2.3.4 调整 R 控制台大小

当 R 控制台窗口大小调整时,R 选项width 会被相应地设置,以便任何未来的输出都适合窗口大小。


上一节: , 上级: R 控制台  

2.3.5 R 控制台文本颜色

使用“偏好设置”窗口设置 R 控制台文本颜色(参见 偏好设置)。


下一步:,上一步:,上一级:R.app  

2.4 一般功能


下一步:,上一步:,上一级:一般功能  

2.4.1 编辑器

R.APP 提供了一个集成编辑器,用于编辑 R 代码。它拥有许多旨在帮助在 R 中开发代码的功能。可能最常用的功能是通过按 Command-Return 直接从编辑器执行代码的能力。其他功能包括语法高亮、括号匹配、代码补全和函数索引。


下一步:,上一步:,上一级:一般功能  

2.4.2 编辑器撤销和行号

编辑器支持在适当的粒度级别上撤销/重做操作(以前是全部或无)。编辑器有一个可选的功能来显示行号。这些有助于定位错误消息。编辑器还响应“转到行”编辑菜单功能。关联的偏好设置窗格允许启用/禁用行号,以及设置行号边距宽度(以适应较大的行号)和文本边距宽度。


下一步:,上一步:,上一级:一般功能  

2.4.3 编辑器文本补全

通过编辑菜单“补全”或键入 Control-. (与 Xcode 相同)可以完成编辑器中键入的输入(文件名和 R 代码)。它使用与控制台窗口相同的工具(为了兼容性,控制台响应 TabControl-.)。


下一步:,上一步:,上一级:一般功能  

2.4.4 编辑器函数列表

编辑器维护一个弹出列表,其中包含已编辑文档中定义的函数。该列表在工具栏中可用,并在您键入时更新。从该列表中选择一个函数会导致光标跳到该函数的开头。


下一个: , 上一个: , 上级: 通用功能  

2.4.5 编辑器语法着色

编辑器支持 R 代码的语法高亮显示。可以使用语法颜色首选项窗格(见下文)更改语法高亮显示颜色。从 R.APP 版本 1.17 开始,使用延迟语法高亮显示,这意味着影响整个文件(例如键入单引号或双引号)的更改不再应用于整个文件,而只应用于几行。这种临时状态通常通过关闭引号来恢复,但在某些罕见情况下,它可能会持续到对有问题的引号的第一行进行更改为止。但是,延迟高亮显示在编辑大型文件时会带来巨大的加速。


下一个: , 上一个: , 上级: 通用功能  

2.4.6 编辑器(内部和外部)

默认情况下,使用的编辑器已集成到 R.APP 中,它是 R 的 macOS GUI。它是一个相对简单的多文档编辑器,支持上面列出的功能。此外,还有两个强大的命令可用于完全源代码正在编辑的文件(Command-E)或将当前选择源代码到 RCommand-Return)。使用 Redit() 函数,允许在 R 等待编辑会话完成时编辑 R 对象或文件。

可以将所有 R 请求“重定向”到外部编辑器,该编辑器在 R.APP 外部运行。在这种情况下,如果使用 edit(),则无法让 R 等待。使用 AppleScript,可以轻松实现类似于 Command-ECommand-Return 的功能。


下一项:,上一项:,上一级:通用功能  

2.4.7 编辑器帮助

编辑器包含一个轻量级的帮助系统,以搜索字段的形式放置在工具栏中。可以使用精确搜索或近似搜索。


下一项:,上一项:,上一级:通用功能  

2.4.8 拖放

R.APP 未运行时,将目录拖放到 R.APP 图标上将启动 R.APP 并设置工作目录。默认情况下,.RData 和历史记录文件(默认名称 .Rapp.history)将从该工作目录中获取。如果在 R.APP 未运行时将文件拖放到 R.APP 图标上,则会启动 R.APP,文件将被恢复(如果它是保存的工作区),源代码到 R.APP 中,或在选定的编辑器中打开。文件是打开还是源代码由启动首选项窗格中的首选项设置指定。

注意:此时,在 R.APP 完成加载之前在编辑器中打开文件会导致 R.APP 崩溃。

R.APP 运行时,将目录拖放会更新工作目录。将文件拖放会将文件源代码到选定的编辑器中或在选定的编辑器中打开文件。双击绑定到(“使用...打开”)R 的文件,如果 R.APP 未运行,则会启动 R.APP 并在编辑器中源代码或打开文件。如果 R.APP 正在运行,则文件将在编辑器中打开。


下一项:,上一项:,上一级:通用功能  

2.4.9 帮助系统

帮助屏幕允许用户返回或前进到以前的帮助页面。可以打印帮助页面。如果找不到帮助主题,弹出窗口将允许退出帮助搜索或将搜索扩展到模糊/近似搜索。


下一项:,上一项:,上一级:通用功能  

2.4.10 历史记录

R.APP 使用的历史文件与 R 创建的历史文件(超集)兼容。多行支持仍然可以在 R.APP 内部使用。多行在使用 Command-Return 功能编辑 R 脚本时特别有用。导入和导出允许从 Mac OS Finder 中可见的文件存储和导入历史记录。多行被保留。这可以通过启动偏好设置面板进行设置。默认情况下,保留的历史记录条目数量为 250。可以进行多种历史记录条目清理模式。至少建议选择“清理历史记录条目”。可以选择删除重复条目和剥离注释,但这并非必需。

注意:命令行 R 将历史记录存储在一个通常称为 .Rhistory 的文件中。建议为 R.APP 历史记录文件使用不同的名称,默认名称为 .Rapp.history

请注意,目前 R.APP 中不支持 loadhistory()savehistory() 以及 history() 函数。


上一节:,上一级:通用功能  

2.4.11 身份验证和 .libPaths

官方 CRAN 二进制文件以预先打包的方式提供,管理员拥有足够的权限来更新 R 并系统范围地安装软件包。但是,默认的 Unix 构建需要 root 身份验证才能安装软件包和其他管理任务。由于以 root 身份运行 GUI 不可行,因此我们提供了从 GUI 发出系统命令进行身份验证的可能性。身份验证需要管理员登录,并导致所有后续系统命令以 root 身份执行。请谨慎使用!

为了允许非管理员维护他们自己的软件包集,R.APP 可选地将 ~/Library/R/x.y/library 添加到 .libPaths(参见启动偏好设置,x.y 表示不带补丁级别的 R 版本)。可以使用软件包安装程序全局安装软件包(仅限管理员用户)或仅针对当前用户安装软件包。(这与主 R 文档中描述的个人库目录的机制相同,但位置特定于 macOS 上的 CRAN 类构建的 R。)

请注意,只有在启用相应的偏好设置选项时才会使用用户本地软件包。管理员用户的默认设置是使用系统范围的目录,非管理员用户将使用个人库目录。


下一项:,上一项:,上一级:R.app  

2.5 菜单


下一项:,上一项:,上一级:菜单  

2.5.1 应用程序菜单

应用程序菜单是主 Apple 菜单后的第一个菜单,标签为 R

通过此菜单,您可以访问三个项目:1. 关于框,它会告诉您当前使用的 R 版本,2. 检查更新,它会在 CRAN 上搜索是否有适用于 macOS 的 R 二进制发行版的最新版本(您需要互联网连接),3. 您可以访问偏好设置(参见 偏好设置)。


下一项:,上一项:,上一级:菜单  

2.5.2 文件菜单

此菜单提供标准功能。打开命令与R 代码操作相关联,这意味着您可以选择一个文件(脚本),它将在 R 中执行。这是对 R 源命令 source 的接口。


下一项:,上一项:,上一级:菜单  

2.5.3 杂项菜单

除了标准功能外,此菜单中唯一相关的项目是编辑对象,它是对 R edit 函数的接口。


下一项:,上一项:,上一级:菜单  

2.5.4 工作区菜单

使用此菜单,您可以加载和保存 R 控制台中输入的命令历史记录,或查看当前内容。您还可以更改当前工作目录,让 R 向您显示当前工作目录,或将其设置回启动目录。从 R 1.9.0 版本开始,当前工作目录也会显示在主窗口栏上。


下一项:,上一项:,上一级:菜单  

2.5.5 工作区菜单

这里您会找到一些自解释的菜单项,用于管理您在 R 中的工作区。您也可以通过指定文件名来加载和保存工作区。所有这些都是对 loadsave R 命令的接口。唯一与该 GUI 相关的项目是“浏览工作区”,它会调用 R 中的 browseEnv() 函数。这将打开一个窗口,其中包含工作区中对象的摘要描述。递归对象(如列表、data.frame 等)可以展开(但只能展开一层)。


下一步:, 上一步:, 上级:菜单  

2.5.6 包菜单

使用此菜单,您可以访问系统上安装的包和数据集列表,以及 CRAN 或 Bioconductor 网站上的包和数据集。

使用前两个菜单,您可以加载和卸载工作区中的包和数据集。让我们从“包管理器”开始。这将打开一个窗口,显示多个列。对于系统上的每个包,您都可以看到一个复选框、包的当前状态(已加载/未加载)、包名称和包描述文本。您可以使用复选框来选择/取消选择您想要的包。在关闭窗口时,选中的包将被加载,未选中的包(如果已加载)将被卸载(在 macOS 上,您无法完全卸载动态库)。

同样适用于“数据集管理器”菜单,但适用于数据集。

您可以从 CRAN 获取或更新软件包,可以选择二进制格式或源代码格式。 CRAN 软件包的每日构建版本可供 macOS 使用。如果您不知道如何从源代码构建 R 本身,您可能无法自行从源代码构建软件包。在这种情况下,您应该始终选择二进制选项。这些二进制软件包适用于您在 CRAN 上找到的 macOS 版 R 的发行版(当然!),尽管它们可能适用于其他预构建版本的 R

当您尝试从 CRAN 安装软件包时,R 首先尝试连接互联网以下载可用软件包的列表。然后将打开一个类似于软件包管理器中的窗口,唯一的区别是每个软件包还包含有关您系统上安装的软件包版本(如果有)和 CRAN 上提供的预构建软件包版本的信息。关闭窗口后,将下载选定的软件包。

相同的策略适用于 Bioconductor 菜单项,但有一些更多选项是 Bioconductor 管理软件包的方式特有的。

由于某种原因,您可能在本地磁盘上拥有要安装的软件包(以二进制或源代码形式),甚至是一个包含软件包源代码的目录。您可以使用最后一个菜单来完成安装软件包的任务。将软件包放在目录形式中通常适用于自己开发软件包的人。

请注意,不包含需要编译的 C、C++、Fortran ... 代码的软件包可以从其源代码编译,无需任何其他工具。

有关此主题的更多信息,请参阅 如何安装软件包


上一页:,上一级:菜单  

2.5.7 帮助菜单

使用此菜单,您可以打开在线手册(R 帮助),阅读此常见问题解答并查看 macOS 版 R 的最新更改、错误修复和新功能(此版本的新增功能)。还提供了 R helphelp.search 函数以及 example 函数的接口。


下一步: , 上一步: , 上级: R.app  

2.6 偏好设置

您可以通过偏好设置来设置 R GUI 的多个方面。当 R 控制台打开时,您可以通过应用程序菜单访问偏好设置窗口。


上一步: , 上级: 偏好设置  

2.6.1 启动

拖放部分定义了 R 启动期间的拖放行为。选项是在编辑器中打开文件或将文件作为源文件。默认情况下,将文件作为源文件。默认库路径部分允许在下次启动 R 时将目录(例如 ~/R/Library)添加到库搜索/安装路径。初始工作目录部分可用于强制执行初始工作目录。如果未指定目录,则使用此目录作为默认目录。更改按钮允许选择新目录。始终应用选择将强制执行指定的初始启动目录。历史记录部分控制启动时读取历史记录文件。如果选中,R 将在启动时读取历史记录文件。R 历史记录文件字段用于从/向其中读取和存储历史记录。可以编辑此字段以允许选择以句点开头的文件(例如 .Rapp.history)。如果您希望无论所选工作目录如何都使用相同的历史记录文件,请指定固定路径(例如 ~/.Rapp.history)。默认按钮会将历史记录文件名重置为其默认值。历史记录处理区域允许设置历史记录中要保留的最大条目数,删除重复条目,清理历史记录条目(这对于在使用 Command-Return 提交多行时删除空行非常有用)以及在将条目添加到历史记录之前剥离注释。


下一步: , 上一步: , 上级: 启动  

2.6.1.1 编辑器偏好设置

如果选择内置编辑器,则允许启用/禁用语法着色、大括号突出显示和显示行号。如果选择外部编辑器,则允许指定哪个外部编辑器。该编辑器将用于所有编辑功能。它作为单独的应用程序运行。使用外部编辑器意味着 R 永远不会在编辑时等待(例如,edit(A) 将立即返回并在外部编辑器中打开 A。Command-E 和 Command-Return 之类的功能需要通过其他方式实现,即 AppleScript。外部编辑器可以是任何应用程序(例如 SubEthaEdit、TextWrangler、BBEdit、Smultron 等),也可以通过 shell 脚本激活(例如,参见或 smultron,两者都提供了对如何启动编辑器的更好控制)。


下一步:, 上一步:, 上级:启动  

2.6.1.2 语法颜色

允许选择语法颜色。


下一步:, 上一步:, 上级:启动  

2.6.1.3 控制台颜色

允许选择 R 控制台中的输入/输出颜色。


上一步:, 上级:启动  

2.6.1.4 Quartz 窗口

目前 Quartz 首选项窗格未被使用。


上一步:, 上级:R.app  

2.7 R.app 问题

在 Unix 系统上,可以使用函数 bug.report() 生成错误报告。或者,可以将错误报告提交到 http://bugs.R-project.org/ 网站。

在提交错误报告之前,请尝试使用 R.APPR 的控制台版本(如果适用)来重现错误。如果错误是 R.APP 特定的,请将错误报告到邮件列表 [email protected]。请不要忘记提及确切的 R.APP 版本,并包含 sessionInfo() 的输出。

在任何情况下,如果发生崩溃,请报告 R.bin 和/或 R.app 应用程序的 crash.log。您可以使用位于 /Applications/Utilities 中的 Console.app 获取此 crash.log(在崩溃时选择 R 控制台中的崩溃菜单中的“1”(如果您看到该菜单)以生成崩溃报告)。


下一步:, 上一步:, 上级:macOS 版 R 常见问题解答  

3 如何安装包

您有几种选择可以在您的系统上安装新包。我们在这里只讨论标准 R 函数(如 install.packages())的 GUI 界面。有关 R 函数,请参阅标准 R 文档。


下一步:, 上一步:, 上级:如何安装包  

3.1 我可以使用 GUI 安装哪些类型的包

GUI 提供对位于 CRAN、Bioconductor 存储库或自定义存储库的包的直接访问/下载/安装。您还可以从本地文件安装包,无论是二进制包还是源包,如下所述。否则,您可以使用适当的 R 命令(参见 install.packages)从上述位置以外的特定位置安装包。


3.2 安装包

适用于 macOS 的 R 识别两种形式的包:二进制包和包。

二进制包是 R 包的即用型形式,因此不需要额外的工具即可使用它们。二进制包特定于给定的 R 版本操作系统。 CRAN 和 Bioconductor 存储库为最新发布的 R 版本提供二进制形式的 R 包。与其他 Unix 系统不同,适用于 macOS 的 CRAN R 默认情况下安装二进制包,即 install.packages 将首先查找二进制存储库,除非另有指示。

源包具有通用性,因为它们可以在 R 支持的任何平台和操作系统上使用,但它们需要在使用之前进行处理和/或编译。可能需要额外的工具,请参见 安装源包 了解详细信息。对于大多数用户来说,二进制包就足够了(如果可用且是最新的)。

在 macOS 上,可以通过三种方式安装包

  • 使用 R.APP GUI 中的包管理器(推荐给大多数 Mac 用户)
  • 使用 R 中的 install.packages 命令
  • 使用 shell(也称为终端)中的 R CMD INSTALL 命令

后两种方法适用于所有 Unix 系统,因此在一般 R 文档中进行了描述。在下面,我们将重点介绍使用包安装程序

如果您决定安装包,则应使用 GUI 的包和数据菜单,特别是子项包安装程序。选择存储库、包类型(二进制或源)并按获取列表。这将通过互联网连接到存储库,并列出所有可供安装的包。该列表会告诉您系统上是否已安装某个包,CRAN 上可用的包版本以及已安装的相同包的版本。

您可以使用搜索栏缩小软件包列表,使其仅包含与您的搜索条件匹配的软件包。此外,您可以使用搜索列表菜单仅列出已安装在系统上的软件包,这对于比较可用软件包和已安装软件包的版本很有用。最后,您可以过滤到以前 R 版本安装的软件包,以便简化升级。

选择您要安装的任何软件包,然后按安装按钮。您可以在 R 控制台中跟踪安装进度。安装完所需软件包后,列表将重新加载以反映新安装软件包的版本。

如果您想将所有软件包更新到最新版本,请选择要用于软件包的存储库,然后按全部更新R 将自动确定可以更新的软件包列表,并向您显示要更新的软件包选择。

您也可以从互联网上自己下载任何其他软件包,并决定从源代码安装它。在这种情况下,选择左上角列表中的本地条目之一,然后按安装按钮(现在已启用)。

还可以通过选择其他存储库来源从其他存储库安装软件包。在相邻字段中输入存储库 URL。请注意,目前软件包安装程序假设自定义存储库以与 CRAN 相同的方式维护源软件包和二进制软件包的正确层次结构,当使用其他存储库时。如果您的自定义存储库是扁平的,请在安装类型列表中选择其他目录 URL


3.3 源代码软件包的安装

不包含编译代码的源代码软件包(除少数例外)可以在没有其他工具的情况下安装。

包含编译代码的软件包(或一些包含 Unix 脚本的软件包)需要用于构建 R 本身的工具,这些工具在“R 安装和管理手册”中进行了讨论,并且这些工具需要在 R.APP 或命令行 R 中的“PATH”中可见。对于 R.APP,您可能需要添加例如 /usr/local/bin,并且通常使用命令行 R 最方便。

如果使用 CRAN 二进制安装的 R,编译器可能不在同一个位置或与 CRAN 构建机器上的名称相同。查看文件 /Library/Frameworks/R.framework/Resources/etc/Makeconf,其中将包含以下行

CC = clang -mmacosx-version-min=10.13
CXX = clang++ -mmacosx-version-min=10.13 -std=gnu++14
FC = gfortran -mmacosx-version-min=10.13
OBJC = clang -mmacosx-version-min=10.13
OBJCXX = clang++ -mmacosx-version-min=10.13

(对于 Intel,ARM 类似)。您可以编辑该文件,或者覆盖文件 ~/.R/Makevars 中的设置:请参阅“R 安装和管理手册”的“自定义软件包编译”部分。


3.4 我安装的软件包在哪里?

主要的软件包库位于 R.framework 内部(在 /Library/Frameworks/R.framework/Resources/library 中)。此库包含与 R 一起分发的软件包(基本软件包和推荐软件包)。只有管理员才能在此系统范围的目录中安装软件包。请注意,此目录是 R 版本特定的。用户可以选择在他们的 ~/Library/R/x86_64/x.y/library 目录中安装个人软件包,其中 x.y 表示没有补丁级别的 R 版本(例如 3.0) - 请参阅 R.APP 中的启动首选项。(对于 ARM,将 x86_64 替换为 arm64。)

软件包安装程序根据安装目标设置执行安装到这两个位置中的任何一个。管理员用户的默认设置是系统范围安装软件包,而普通用户的默认设置是他们的个人库树。

如果您使用 install.packages R 函数而不是软件包安装程序,则将应用常规的 Unix 行为(有关详细信息,请参阅帮助页面)。对于默认设置,这意味着软件包将根据启动首选项设置进行安装。您可以通过发出以下命令来检查当前的默认设置:

.libPaths()

4 R 和外部应用程序


下一步:,上一步:,向上:R 和外部应用程序  

4.1 AppleScript 支持

R 部分支持 Apple-Scripts。目前,R 可以被调用并被要求从 AppleScript 脚本中运行命令。以下是与 R 交互的脚本示例。它首先调用 R,然后使用 cmd applescript 命令向 R 发送命令。

set CommandLine to "R.Version()"
try
	tell application "R"
		activate
		with timeout of 90000 seconds
			cmd CommandLine
			cmd "Sys.getenv()"
			cmd "print(\"HelloWorld!\")"
		end timeout
	end tell
end try

在上面,cmdR 字典中的(唯一)applescript 命令,用于告诉 R 在 R 控制台中执行 R 命令。语法是

cmd <command string>

其中命令字符串必须用引号括起来。实际上,命令的输出不会发送回调用 R 的应用程序,而是直接发送到 R 控制台。

存在一些问题。第一个问题是,如果 R 还没有运行,启动需要一段时间(取决于机器的速度)。在此期间,脚本会发送命令而不等待,可能会导致一些命令被 R 错过,即这些命令在 R 准备好接收 AppleScript 命令之前到达。第二个问题是,AppleScript 可能调用了错误版本的 R。如果您的系统上安装了旧版本的 R(例如旧的 Carbon R),就会出现这种情况。

例如,这里提供一个简单的脚本,它要求 R 使用文件对话框 source 一个文件。

set file_to_source to (choose file with prompt "Choose file to source") as alias

try
	tell application "R"
		activate
		with timeout of 90000 seconds
			cmd "source(\"" & file_to_source & "\")"
		end timeout
	end tell
end try

下一步:,上一步:,上一级:R 和外部应用程序  

4.2 外部编辑器

R 接受 Apple 事件命令 open。这意味着外部编辑器可以通过文件发送 R 代码片段来与 R 通信以执行。这是 Alpha X 中 R-Tcl 模式采用的方法(参见 http://www.kelehers.org/alpha/)。


上一步:,上一级:R 和外部应用程序  

4.3 Finder 操作

将文件拖放到 R 图标上,会导致 R 通过 source R 命令源此文件,或者,如果文件是 R 图像数据文件 RDX1 或 RDX2(通常是扩展名为 .rda.RData 的文件),则数据将加载到工作区中,并且工作区中所有具有相同名称的对象将被覆盖,不会发出任何通知。加载数据文件等同于 R 命令 load。目前,无法控制文件类型,即拖放错误的文件(即不是 R 脚本或图像数据的文件)只会导致错误。用户需要采取正确的操作

如果 R 尚未运行,此操作将导致 R 启动。


5 Quartz 设备

quartz() 设备是 macOS 上 R 的原生图形设备。它的名称源自苹果的 Quartz 技术,该技术本质上类似于 PDF 渲染。

quartz() 设备可以从 R.APP 或在 Mac 控制台中运行的适当构建的 R 中使用。在支持的情况下,它是默认的图形设备。


下一页: , 上一页: , 上级: Quartz 设备  

5.1 交互模式

Quartz 设备允许交互。您可以使用 identifylocator 函数。要中断序列,您应该右键/控制键单击或按 ESC 键。


下一页: , 上一页: , 上级: Quartz 设备  

5.2 保存图像

您可以将 Quartz 设备窗口的内容保存到 PDF 文件中,方法是在设备窗口获得焦点时通过 R 菜单进行操作。这是一种从 R 将高质量图形导出到 macOS 上其他应用程序的简单方法,因为图形是基于 PDF 的(几乎所有可用的应用程序都是如此)。有关其他解决方案,请参见(参见 将图像复制到剪贴板)和 quartz.save 函数。


上一页: , 上级: Quartz 设备  

5.3 将图像复制到剪贴板

您可以将 Quartz 设备窗口的内容复制到剪贴板,以使生成的图像可用于粘贴到其他应用程序中。剪贴板将包含 Quartz 设备窗口的 PDF 版本和位图版本。将使用哪个版本取决于粘贴应用程序,大多数现代应用程序将更喜欢 PDF 版本,因为它支持矢量图形,质量更高。


6 Tcl/Tk 问题

通过 CRAN 提供的每个 R 二进制发行版都构建为使用 Tcl/Tk 的 X11 实现。当然,必须先启动 X 窗口服务器:这应该在 macOS 上自动发生,前提是它已安装(它需要从 http://xquartz.macosforge.org 单独安装)。第一次在 X 服务器中执行操作时,可能会出现长时间延迟,因为正在构建字体缓存;启动服务器可能需要几秒钟。

如果您不喜欢 X11 样式的小部件并使用命令行 R,您可能希望使用 Aqua 版本的 Tcl/Tk 构建 R(参见“R 安装和管理手册”)。但是,请注意,这种构建在 R.APP GUI 中使用时不起作用。


下一步:,上一步:,向上:macOS 上的 R 常见问题解答  

7 R.app 的国际化

RR.APP GUI 支持国际化。其中包括消息和 GUI 元素可以翻译成各种语言。 R.APP 会自动检测用户在系统偏好设置的“语言与地区”部分中的设置,并使用这些信息在可用时提供翻译后的消息和 GUI。

如果您使用非标准设置(例如,与格式不同的语言),您可以通过设置“force.LANG”默认设置来覆盖自动检测,例如

defaults write org.R-project.R force.LANG en_US.UTF-8

终端中运行时,它将强制使用美式英语设置,无论系统设置如何。如果您不知道终端是什么,可以使用以下 R 命令代替

system("defaults write org.R-project.R force.LANG en_US.UTF-8")

但不要忘记退出 R 并重新启动 R.APP。请注意,您必须始终使用区域设置的“.UTF-8”版本,否则 R.APP 将无法正常工作。

默认情况下,R.APP 对新创建的文档和控制台使用 UTF-8。打开新文档时,R.APP 假设为 UTF-8,只有当文档违反 UTF-8 规则时,它才会尝试回退到传统编码,通常是 Mac Roman。

如果您有兴趣将 R.APP GUI 翻译成其他语言,请阅读开发者文档,网址为 http://developer.r-project.org/Translations30.html


下一步:,上一步:,向上:macOS 上的 R 常见问题解答  

8 其他资源

以下是一些可能对 macOS 和/或开发者有用的参考资料。


下一节: , 上一节: , 上级: 其他资源  

8.1 Apple 开发者连接

Apple 开发者连接(可通过 http://developer.apple.com 访问)是 Apple 产品(操作系统、硬件、软件)开发者信息的主要来源。您可以免费订阅 ADC 并获取 Apple 的最新工具(例如编译器):但最近这些工具已通过 App Store 分发。


上一节: , 上级: 其他资源  

8.2 macOS 开发者页面

有一个页面专门用于 macOS 上 R 的开发版本。该页面位于 http://mac.R-project.org/,由 Simon Urbanek 维护。它包含 RR.APP 的最新夜间构建版本,以及有关构建 R 所需工具的信息。


下一节: , 上一节: , 上级: macOS 上 R 的常见问题解答  

9 致谢

特别感谢 Jan de Leeuw、Byron Ellis 和 Thomas Lumley(顺序随机)。最后但并非最不重要的是 Apple,感谢其出色的操作系统和 GUI。


上一节: , 上级: macOS 上 R 的常见问题解答  

10 其他问题


10.1 如何擁有每個會話的 .Rprofile?

您可以在您喜歡的會話目錄中寫入一個 .Rprofile 文件,並使用偏好設置(見 當前和啟動工作目錄)相應地更改啟動工作目錄。


10.2 如果我將文件拖放到 R 圖標上會發生什麼?

在這種情況下,R 將嘗試源此文件或加載圖像數據文件(見 Finder 操作)。如果 R 尚未運行,它將被啟動。


10.3 如何中斷冗長的運算或輸出?

R.APP 中,您可以使用工具欄上的“停止”按鈕或控制台窗口中的 ESC(轉義)鍵來中斷正在運行的計算或輸出。

對於命令行版本,通過按下 Ctrl-c 可以實現相同的效果。這兩個應用程序都支持 INT 信號,即您可以在單獨的終端窗口中輸入以下內容以取消所有 R 計算

killall -INT R

(可能在停止時會有一些延遲,因為 R 會將對中斷的響應排隊,直到代碼中的安全點。)

但是,如果執行的代碼沒有檢查中斷(使用“R_CheckUserInterrupt”),可能無法停止 R。在這種情況下,可能值得提醒包維護者允許中斷(如果合適)。


10.4 启动 R 时出现错误信息!

如果在启动 R GUI 时看到包含 Library/InputManagers 的错误信息,那么您的系统中安装了一些损坏的 haxxies。这些信息不是来自 R,所以不要责怪我们。位于您家目录(或系统)的 Library/InputManagers 中的捆绑包是加载到您启动的每个 Mac 应用程序中的黑客。在大多数情况下,您不会看到它们崩溃,因为大多数应用程序不会显示控制台输出,但 R 会,因此这些黑客导致的所有错误都会变得可见。最简单的解决方法是删除所有有问题的捆绑包(可能是整个 Library/InputManagers 文件夹),并获取黑客的修复版本(如果您需要它)。造成黑客损坏的最常见原因是系统升级(例如,您获得了一台新 Mac,并且您传输了包含与新 Mac 不兼容的黑客的设置)。

如果您想在 GUI 中禁用所有外部错误输出,请使用

defaults write org.R-project.R 'Ignore stderr' YES

在终端中。但是,请注意,这将禁用来自外部程序(包括包安装或 system 命令)的所有错误输出。


10.5 使用哪个 BLAS 以及如何更改?

R 使用的 BLAS 库取决于 R 的编译方式(有关详细信息,请参阅“R 安装和管理”手册)。从 CRAN 提供的当前 R 二进制文件提供了基于 vecLib 的 BLAS 和与 R 一起提供的参考 BLAS。vecLib 是 Apple 的 Accelerate 框架的一部分,该框架为 Mac 硬件提供了优化的 BLAS 实现。虽然速度很快,但它不受我们的控制,并且可能提供不准确的结果。

CRAN 二进制文件使用 `--enable-BLAS-shlib` 选项,并提供两个 Rblas 共享库:libRblas.vecLib.dylib 使用 vecLib BLAS,libRblas.0.dylib 使用来自 R 的参考 BLAS。符号链接 libRblas.dylib 决定使用哪个库。目前默认使用 R BLAS:建议为了精度使用它。

为了更改使用的 BLAS,请相应地更改 libRblas.dylib 符号链接 - 例如在终端中

cd /Library/Frameworks/R.framework/Resources/lib

# for vecLib use
ln -sf libRblas.vecLib.dylib libRblas.dylib

# for R reference BLAS use
ln -sf libRblas.0.dylib libRblas.dylib

此功能仅存在于 R CRAN 二进制文件中。通常从源代码编译的 R 仅包含上述 BLAS 库中的一个,对应于使用的配置选项。

使用的 BLAS 库显示在 `sessionInfo()` 中。


10.6 安装包时什么也看不到!

在包安装过程中不会连续生成输出。R.APP 会尽力尽快显示输出,但例如文档脚本在完成之前不会打印任何内容。

另请注意,R.APP 的开发版本将输出发送到错误控制台而不是屏幕。在这种情况下,您可能需要检查“控制台”应用程序。


10.7 为什么图像图中存在微弱的线条?

当基于 `image()` 函数的图导出到 PDF 时,Preview 会在创建图像的矩形边缘显示非常微弱的网格线。这些线条是 Preview 中的渲染伪像,来自抗锯齿和亚像素渲染的组合。它们实际上不是 PDF 的一部分(放大后会发现它们不是随着缩放而变大的真实对象),因为矩形被定义为区域的无间隙覆盖。可以通过在 Preview 中禁用抗锯齿来避免这种效果。

我们在 Quartz 中通过将所有矩形捕捉到屏幕的像素边界来纠正这种效果,但在 Preview 中则没有。

在任何具有相邻填充多边形且没有边框的图中都会出现相同的效果。


10.8 为什么 R GUI 不支持键盘快捷键 XYZ?

R.APP GUI 使用 Apple 框架进行文本编辑,因此文本视图(控制台、编辑器等)的行为与其他应用程序一致,并允许非常灵活的自定义。例如,如果您对 macOS 提供的默认 Emacs 式键绑定不满意,Apple 允许您任意扩展它们。有关更多详细信息,请参阅 Apple 关于 键绑定 的文档。还有许多关于键绑定自定义的第三方页面,搜索 StandardKeyBinding.dict


10.9 CRAN 构建和普通构建有什么区别?

R 的 CRAN 构建与 R 的普通构建略有不同,即简单的 ./configure && make && make install。所有从源代码编译的构建的默认包类型为 "source",而 CRAN 使用二进制包。只有 CRAN 构建保证与 CRAN(或 Bioconductor)上的包二进制文件兼容。CRAN 使用的确切标志在 CRAN 构建系统的 R SVN 存储库中可用,作为 conf.xxx 文件。对于 R 4.0.0 及更高版本,这是 https://svn.r-project.org/R-dev-web/trunk/QA/Simon/R4 此外,CRAN 构建还包括在框架内运行 R 所需的库。CRAN R 和包使用的静态库可在 https://mac.R-project.org/bin 中找到。


10.10 为什么 R 框架中的 R.home() 没有版本?

在 R 的命令行版本中,R.home() 始终指向 R 框架内的 Resources 目录符号链接,该链接指向 Versions/Current/Resource,而该链接又指向实际的 home - 一个版本化的目录,例如 Versions/4.2/Resources。这就是 macOS 中框架版本控制的工作方式,由 Apple 定义(参见 框架解剖)。

虽然可以在 R shell 脚本中直接将 R_HOME 设置为版本化的路径(从而能够在不更改符号链接的情况下并行运行不同的版本),但存在一些潜在的危险,因此我们不建议这样做。一个问题是,从源代码构建包将无法正常工作。链接器始终链接到框架的当前版本,因此只有当前活动的 R 版本才能编译包。此外,包可能在安装时使用了 R.home() 的值,因此可能无法与不正确的设置一起使用。最后,如果这样的 R 启动脚本被复制并且 R 版本发生变化,它将停止工作。


10.11 R.app GUI 在启动时崩溃!

如果你的 R.APP GUI 在启动时崩溃,通常有两种原因:保存的工作空间或损坏的历史记录文件。(另一个原因是 R.APPR 之间的版本不匹配,如果其中一个被更新了)。

保存的工作空间可能包含隐式加载包的命令,这些命令反过来可能会触发包中的错误或为 R 提供不正确的起始值(尤其是在使用另一个 R 保存时)。尝试删除或重命名你的工作空间 - 它被称为 .RData。如果你没有更改启动设置,你可以例如使用

mv ~/.RData ~/workspace.RData

将其移到一边,并在稍后使用 load("~/workspace.RData") 手动加载以进行检查。

启动时崩溃的第二个最常见原因是历史记录文件,该文件不是使用 R.APP GUI 创建的。同样,将其移到一边以查看是否这是问题所在:对于默认文件,这可以通过以下方式完成

mv ~/.Rapp.history ~/history.txt

虽然我们正在尝试从无效的历史记录文件中恢复,但它们仍然可能由于 macOS 中字符串内部处理问题而导致 R.APP 崩溃。我们目前正在努力解决此问题。

如果你已经完成了上述两项操作,但 R.APP 仍然崩溃,请在崩溃后在菜单中选择“1”(如果你在控制台中看到崩溃菜单),并将生成的崩溃报告发送给我们(请参阅上面的 R.app 错误)。


10.12 为什么 GUI 不保存我的历史记录?

R.APP 默认情况下会将历史记录保存到 .Rapp.history 文件中,而命令行 R 会使用 .Rhistory。因此,保存的历史记录仅在后续的 R.APP 会话中使用,而不会在命令行 R 中使用,反之亦然。

请注意,在 R.APP 中调用 savehistory() 目前不会保存 R.APP 会话的历史记录:这意味着 history() 将显示一个空窗口。


10.13 我在 GUI 中收到“命令未找到”,但在终端中却可以正常工作 - 为什么?

在执行系统命令时(例如,直接通过 system 或间接通过调用其他程序的函数,例如 install.packages),shell 搜索程序的位置由 PATH 环境变量控制。该变量可能在从交互式 shell 启动的 R 和在 GUI 中启动的 R 中设置不同。您可以使用 Sys.getenv("PATH") 来验证当前设置。

当从 shell 启动 R 时(例如,在终端的命令行上),它将继承来自该 shell 的设置。这些设置通常由特定于 shell 的配置文件修改,例如 .profile.bashrc。这些设置仅适用于 shell,而不适用于整个系统。此外,一些安装程序(例如 MacTeX)会修改全局 shell 设置,以使用户在命令行上更方便地使用,但同样,这些设置不适用于从 shell 启动的程序 - 例如 GUI。有关 Apple 对此主题的说明,请参阅 Apple 技术问答 QA1067

为了在 R 中标准化您的 PATH 设置,您可以在 .Renviron 文件中设置它(在您的主目录中 - 有关 R 如何在启动时使用配置文件的详细信息,请参阅 R 中的 ?Startup)。此设置将适用于 R,无论它如何启动。如果您希望通过 Sys.getenvSys.setenv 选择性地修改现有的 PATH 变量,您也可以在 .Rprofile 中添加更复杂的结构。


10.14 我在 Quartz 图表中看不到任何文本!

通常这意味着您的系统中存在损坏的字体。打开字体册应用程序(在应用程序中)并检查您正在使用的字体(例如,Quartz 中的默认字体目前是“Arial”)。损坏的字体将没有字形(文本将不会按预期显示),请删除此类字体。


10.15 我无法将调试器附加到 R

使用 Apple 安装程序安装的 R 进程无法被调试器附加。这是 Apple 作为安全措施引入的限制。自 2020 年 1 月起,Apple 要求所有经过公证的应用程序使用“强化运行时”https://developer.apple.com/documentation/security/hardened_runtime,其中一项影响是此类进程无法被调试器篡改。因此,官方的 R 安装程序必须使用强化运行时,因为 Apple 将不再允许安装未经公证的软件。

为了调试 R 代码或包,您可以使用不使用强化运行时且未经公证的 R 二进制文件。此类二进制文件可在 https://mac.R-project.org/ 的 tar 包中找到,可以通过解压缩到/来安装,例如:

curl -LO http://mac.r-project.org/high-sierra/R-4.2-branch/x86_64/R-4.2-branch.tar.gz
tar fxz R-4.2-branch.tar.gz -C /

如果您不是管理员,您可能需要使用sudo tar ...

注意:自 4.2.0 版本以来的 R 版本在强化运行时中包含一项授权,允许调试,因此上述问题不应在 R 4.2.0 版本以来的 R 版本中出现。