R stop() 函数中的域参数有什么作用?

Wei*_*ang 5 error-handling r

运行功能时

stop("m<0", domain=NA)
Run Code Online (Sandbox Code Playgroud)

domain 的默认设置是NULL,但是当您将其设置为 时会发生什么NA?我试图将域更改为此,但它似乎没有做任何不同的事情。报告的错误消息是相同的。

Tec*_*e01 1

在 R 中,消息被划分为多个域,并且翻译可用于域中的部分或全部消息。您可以通过修改变量来切换语言域LANG

> Sys.setenv(LANG = "fr")
> 2 + x
Erreur : objet 'x' introuvable
> Sys.setenv(LANG = "en")
> 2 + x
Error: object 'x' not found
Run Code Online (Sandbox Code Playgroud)

用法示例:

> Sys.setenv(LANG = "de")
> 
> if((length(nopkgs) > 0) && !missing(lib.loc)) {
+   pkglist <- paste(sQuote(nopkgs), collapse = ", ")
+   msg <- sprintf(ngettext(length(nopkgs),
+                           "library %s contains no packages",
+                           "libraries %s contain no packages",
+                           domain = "R-base"),
+                  pkglist)
+   warning(msg)
+ }
Fehler: Objekt 'nopkgs' nicht gefunden
> 
Run Code Online (Sandbox Code Playgroud)

...重新启动 R 会话

> Sys.setenv(LANG = "en")
> if((length(nopkgs) > 0) && !missing(lib.loc)) {
+   pkglist <- paste(sQuote(nopkgs), collapse = ", ")
+   msg <- sprintf(ngettext(length(nopkgs),
+                           "library %s contains no packages",
+                           "libraries %s contain no packages",
+                           domain = "R-base"),
+                  pkglist)
+   warning(msg)
+ }
Error: object 'nopkgs' not found
> 
Run Code Online (Sandbox Code Playgroud)

R 使用以下域。

  • R 域用于来自 R 解释器的 C 级错误和警告消息。
  • 域 R-pkg 用于每个包中的 R 停止和警告消息,包括用于基础包的 R-base。
  • 每个包中 C 级消息的域 pkg。
  • 域 RGUI 用于 Windows GUI 前端 R 的菜单等。

以这种方式划分消息允许 R 可扩展:加载包时,也可以加载它们的消息翻译目录。

根据当前指定的语言,尽可能具体地按域查找翻译,因此,例如,对于奥地利用户,将优先使用奥地利语 (de_AT) 翻译目录,而不是通用德语 (de)。但是,如果特定翻译目录存在但不包含翻译,则将查阅不太具体的目录。例如,R 具有 en_GB 目录,可将标准消息中的美国用语(例如gray)翻译成英语。

通常可以通过即时重新编码来使用正确语言但错误字符集的翻译。LANGUAGE 变量可以是以冒号分隔的列表,例如 se:de,以优先顺序降序给出一组语言。

如果找不到合适的翻译目录或所选目录中未翻译特定消息,则使用英语。翻译后的目录存储为扩展名为 .mo 的二进制文件。域 R 和 RGui 的目录位于 R_HOME/share/locale 下,特定于包的目录位于已安装包的 po 目录下(因此需要位于源代码中的 inst/po 下)。这些目录包含由语言标识的每种翻译的一个目录,例如se 或de_AT。每个语言目录都有一个子目录 LC_MESSAGES,其中包含每个域的文件。因此 R 安装至少包含文件

share/locale/en/LC_MESSAGES/R.mo
share/locale/en@quot/LC_MESSAGES/R.mo
library/splines/po/en/LC_MESSAGES/R-splines.mo
library/splines/po/en/LC_MESSAGES/splines.mo
Run Code Online (Sandbox Code Playgroud)

(“语言”en@quot 是带有 Unicode 双向引号的英语,用于 UTF-8 语言环境。)

参考: https: //developer.r-project.org/Translations30.html