警告:此语言环境中的输入字符串不可用

时间:2017-01-18 11:06:42

标签: r r-markdown

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"

2 个答案:

答案 0 :(得分:9)

将其直接嵌入包含中文字符注释的Rmarkdown脚本中:

Sys.setlocale('LC_ALL','C')

如果您只是在运行rmarkdown脚本之前在R控制台中运行它,那可能会暂时更改设置和工作,但正如您所说,如果您重新启动R,它将不会保持这种状态。这就是为什么它直接更好直接将该行嵌入需要它的脚本中。

答案 1 :(得分:3)

我在gsub()中遇到了类似的问题,只需设置useBytes = TRUE就可以解决该问题,而无需更改语言环境。 strsplit()中也应如此。从文档中:

  

如果为TRUE,则按字节而不是按字符进行匹配,并且不会转换带有标记编码的输入。