r-在全局环境中加载时与在包中加载时来自相同函数的不同结果



问题

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

功能

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

我做错了什么?

自制包中似乎不支持"特殊字符"。检查程序包的DESCRIPTION文件中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"

要修改这些设置:

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

最新更新