R stop()函数中的domain参数是做什么的?

时间:2017-12-10 20:58:07

标签: r error-handling

运行功能时

stop("m<0", domain=NA)

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

1 个答案:

答案 0 :(得分:1)

在R中,邮件被划分为域,并且可以为域中的某些或所有邮件提供翻译。您可以通过修改LANG变量来切换语言域:

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

示例用法:

> 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
> 

...重启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
> 

R使用以下域名。

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

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

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

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

如果找不到合适的翻译目录或未在所选目录中翻译特定消息,则使用英语。已翻译的目录存储为扩展名为.m的二进制文件。域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

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

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