问题
我正在使用本教程开发一个简单的包来学习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