我尝试将我的默认编码设置为UTF-8; 到目前为止没有成功:
a <- "Hallo"
b <- "äöfd"
print(Encoding(a))
# [1] "unknown"
print(Encoding(b))
# [1] "latin1"
options(encoding = "UTF-8")
a <- "Hallo"
b <- "äöfd"
print(Encoding(a))
# [1] "unknown"
print(Encoding(b))
# [1] "latin1"
old_locale <- Sys.getlocale()
Sys.setlocale(category = "LC_ALL", locale = "English_United States.1252")
a <- "Hallo"
b <- "äöfd"
print(Encoding(a))
# [1] "unknown"
print(Encoding(b))
# [1] "latin1"
Sys.getlocale()
# [1] "LC_COLLATE=German_Switzerland.1252;
# LC_CTYPE=German_Switzerland.1252;
# LC_MONETARY=German_Switzerland.1252;
# LC_NUMERIC=C;LC_TIME=German_Switzerland.1252"
Run Code Online (Sandbox Code Playgroud)
我发现以下链接R编码文件和如何使用Sys.setlocale(),但你可以看到它似乎他们不适用于我的情况,我不明白为什么.
我也试过Sys.setlocale(category = "LC_ALL", locale = "en_US.UTF-8")但得到了 …
(这个问题也是在Github上问这里)
将 R 升级到 4.0.2 后,测试似乎失败了,因为sortin的算法发生了testthat变化。以下内容显示,这base::sort()和browser()是R中4.0.2罚款(见这个问题,为什么增加这个检查。):
y <- c("Schaffhausen", "Schwyz", "Seespital", "SRZ")
print(sort(y))
# [1] "Schaffhausen" "Schwyz" "Seespital" "SRZ"
browser()
print(sort(y))
# [1] "Schaffhausen" "Schwyz" "Seespital" "SRZ"
Run Code Online (Sandbox Code Playgroud)
但是如果你创建一个包,调用它testsort,使用添加测试环境usethis::use_testthat()并在其中添加一个文件“test-sort.R”/testsort/tests/testthat/
test_that("test sort", {
xx <- c("Schaffhausen", "Schwyz", "Seespital", "SRZ")
print("")
# bowser()
print(sort(xx))
expect_equal(sort(xx), c("Schaffhausen", "Schwyz", "Seespital", "SRZ"))
})
Run Code Online (Sandbox Code Playgroud)
你得到
==> devtools::test()
Loading testsort
Testing testsort
v | OK F W S | Context
/ …Run Code Online (Sandbox Code Playgroud) 任务是按照英文字母对美国州名缩写进行排序.但我注意到,R根据某种操作系统语言或区域设置对列表进行排序.例如,在我的语言(立陶宛语)中,甚至拉丁语(非立陶宛语)字母的顺序也与英语字母表中的顺序不同.仅在两个字母表中比较非立陶宛字母的顺序:
"ABCDEFGHI Y JKLMNOPRSTUVZ"
sort(LETTERS)
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "Y" "J" "K" "L" "M" "N"
[16] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Z"
Run Code Online (Sandbox Code Playgroud)
与
"ABCDEFGHIJKLMNOPQRSTUVWX Y Z"
LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O"
[16] "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
Run Code Online (Sandbox Code Playgroud)
因此,状态的排序缩写的顺序也不同(注意最后2个,它们应该是"WV"然后是"WY"):
sort(state.abb)
[1] "AK" "AL" "AR" "AZ" "CA" "CO" …Run Code Online (Sandbox Code Playgroud)