gpt4 book ai didi

r - Knitting Rmd 以不同方式对待非英文字符

转载 作者:行者123 更新时间:2023-12-02 02:14:35 26 4
gpt4 key购买 nike

我尝试在下面编写可重现的示例。它是 .Rmd 和 .r 的混合体。希望您能明白原因。

我遇到的问题是,根据代码是直接在控制台中运行还是编织成 HTML 时,非英语字符的处理方式不同。

在下面的示例中,我创建了一个带有字符 ü 和 ö 的小型 data.frame,将其写入 csv,然后再次读回。

如果写入和读取都发生在一个 block 的内部或外部,那么一切都很好。

但如果写入和读取发生在不同的地方,则使用不同的编码(我认为)。字符会混淆。

这意味着在读取数据时,编译 .Rmd 文件时需要与直接在 R 中工作时不同的编码。

据我所知,语言环境总是相同的,所以我不明白发生了什么。

有什么想法吗?

直接写入和读取csv以创建新的数据文件

df2 <- data.frame(Cäl1 = c(1,2), Col2 = c("ü","a")) 

write.csv(df2, file="df2.csv")

read.csv("df2.csv")

Sys.getlocale(category = "LC_ALL")

现在尝试编织整个文档(只是运行 block 的行为不同)

```{r read_inside}

read.csv("df2.csv")

Sys.getlocale(category = "LC_ALL")

```

第二个 block 将起作用,因为 data.frame 是在 block 内创建的

```{r write_read_inside}


df2 <- data.frame(Cäl1 = c(1,2), Col2 = c("ü","a"))
write.csv(df2, file="df2.csv")
read.csv("df2.csv")

Sys.getlocale(category = "LC_ALL")

```

类(class)信息:

R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C LC_TIME=English_United Kingdom.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

loaded via a namespace (and not attached):
[1] tools_2.15.0

最佳答案

所以答案是保证UTF8编码,例如write.csv(..., fileEncoding = 'UTF-8')。根本问题实际上是 RStudio 默认使用 UTF8,但 R 默认使用操作系统的 native 编码。我们可以要求 R 在 write.csv 中使用 UTF8,或者要求 RStudio 使用 native 编码 (options(encoding = 'native.enc'))。

关于r - Knitting Rmd 以不同方式对待非英文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com