在全局环境中加载时与在包中加载时,同一函数的不同结果

Different results from the same function when loaded in global environment vs in a package

问题

我正在开发一个简单的包来学习 R 使用这个 tutorial 的包开发。为此,我写了一个函数,然后在全局环境中试用,然后在包中提供。但是在这两种情况下 运行 调用函数时我得到了不同的结果。

函数

what_time <- function(language = "english") {

  if (!language %in% c("urdu", "english")) {
    stop("Either choose english or urdu as a language.")
  }

  time <- format(Sys.time(), "%H:%M")

  if (language == "urdu") {

    paste(time, "وقت ھوا ہے")

    } else if (language == "english"){

      sprintf("It is %s now!", time)
  }


}

运行全局环境中的函数:

我在 R 控制台中创建了上述函数定义,然后 运行 函数:

what_time("urdu")
[1] "08:47 وقت ھوا ہے"

运行加载包后的功能:

然后我重新启动了 R 会话并执行了以下操作:

devtools::load_all()
i Loading umair
what_time("urdu")
[1] "08:47 <U+0648><U+0642><U+062A> <U+06BE><U+0648><U+0627> <U+06C1><U+06D2>"

我做错了什么?

您的 self-made 软件包似乎不支持 'special characters'。检查包描述文件中 Encoding 的值,以及 R 会话中 Sys.getlocale()Sys.getenv('LANG')Sys.getenv('LC_CTYPE') 的值。

您使用的是哪种语言并不重要,但它应该是 UTF-8 变体。

使用以下设置在我自己的机器上生成正确的输出没有任何问题:

文件'testpackage/DESCRIPTION'

...
Encoding: UTF-8
...

R(工作室)会话

> Sys.getlocale()
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"

> Sys.getenv('LANG')
[1] "en_US.UTF-8"

> Sys.getenv('LC_CTYPE')
[1] "en_US.UTF-8"

To modify these settings:

Sys.setlocale("LC_ALL", 'en_EN.UTF-8')
Sys.setenv("LANG" = "en_EN.UTF-8")
Sys.setenv("LC_CTYPE" = "en_EN.UTF-8")

RStudio 首选项

首选项 > 代码 > 保存 > 默认文本编码:UTF-8