Rstudio版本1.0.136
R版本3.3.2
奇怪的是,当我在带有Rmarkdown的.Rmd
文件中逐行运行代码(代码中有中文注释)时,控制台将打印一条警告,如下所示:
Warning message:
In strsplit(code, "\n", fixed = TRUE) :
input string 1 is invalid in this locale
这太烦人了,因为每一行都会出现。 我在RStudio的设置中更改了默认文本编码,但是UTF-8和BG2312都不能阻止出现此警告消息。 请注意,它只是在行代码逐行时出现,如果我选择一个块按一个按钮来生成一个html,则不会出现警告。 我的代码如下:
```{r}
da=read.table("m-intcsp7309.txt",header=T)
head(da)
# date intel sp三列
length(da$date)
# 444数据
intc=log(da$intc+1)
# 测试
plot(cars)
# 测试警告信息
plot(cars)
# 为什么会出现警告?
plot(cars)
```
我测试过它不是来自中文评论,我只在使用英语时遇到它 现在。 以下是更多信息:
Sys.getlocale()
[1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;
LC_CTYPE=Chinese (Simplified)_People's Republic of China.936;
LC_MONETARY=Chinese (Simplified)_People's Republic of China.936;
LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936"
答案 0 :(得分:9)
将其直接嵌入包含中文字符注释的Rmarkdown脚本中:
Sys.setlocale('LC_ALL','C')
如果您只是在运行rmarkdown脚本之前在R控制台中运行它,那可能会暂时更改设置和工作,但正如您所说,如果您重新启动R,它将不会保持这种状态。这就是为什么它直接更好直接将该行嵌入需要它的脚本中。
答案 1 :(得分:3)
我在gsub()
中遇到了类似的问题,只需设置useBytes = TRUE
就可以解决该问题,而无需更改语言环境。 strsplit()
中也应如此。从文档中:
如果为TRUE,则按字节而不是按字符进行匹配,并且不会转换带有标记编码的输入。