• R语言
  • [已解决]Rmarkdown中使用中文,跳出警告

各位大神,你们好!
我是一个Rmarkdown的初学者,现在我在Rmarkdown里面写的每一个命令,执行以后都会跳出一个警告:

Warning message:
In strsplit(code, "\n", fixed = TRUE) :
  input string 1 is invalid in this locale

命令确实也执行了,但每次都跳出这个来真的很难受。
我搜了一下,这个人跟我遇到的问题一样:https://stackoverflow.com/questions/43833096/r-warning-message-in-strsplitcode-n-fixed-true-input-string-1-is-i
但是没有解决方案,之后我又搜到这个人也遇到了这个问题:
http://oiltang.com/2017/08/14/r-language-warning-message/?nsukey=SKwwkOVnGGrORfntgEhWVbh9OKLyx4J2X9TcEDmwSoY32FxFTWKlgEzAANrYAdt3kE0htSt0iG3P1AN2FqhvhPt2FZVkuA0C7Q8e2BYRp4Rk2lUsVSR6CEgNULOvidJOoFo7iBiHVIYhXYt3fz2a6hwtoQlU2T2WIk90XbWtUrn2ZeT7wO5FoPv045BxfijW437l78UCtc0IA2BpXtsyXX2Igtg3D3D
他的解决方案(https://stackoverflow.com/questions/41717781/warning-input-string-not-available-in-this-locale)是每次打开R的时候把这个命令运行一下:

> Sys.setlocale('LC_ALL','C')
[1] "C"

我试了一下,用这个命令确实可以让那个警告不再跳出,但却出现了一个更大的问题,那就是我的命令里不能有中文了。比如这个命令原来可以正常运行:

> address2 <- "1.待导入/11·29result.xlsx"

但现在我在右上角的Global Environment里面看到address2是:

"1.<U+5F85><U+5BFC><U+5165>/11<U+00B7>29result.xlsx"

所以读取这个地址也就失败了:

> data1 <- readxl::read_excel(address2)
Error in read_fun(path = path, sheet = sheet, limits = limits, shim = shim,  : 
  Evaluation error: zip file '1.寰呭鍏?11路29result.xlsx' cannot be opened.

类似的解决方案还有这句:

> Sys.setlocale(category='LC_ALL', locale='English_United States.1252')
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"

也是一样的问题。
所以,在Rmarkdown中有没有两全的方法,既可以保留语句中的中文,又能让警告信息不跳出呢?
我看好像用mac的同学没有遇到这个问题。
期待各路大神的解答?

我也有这个问题。好像某一段时间这个警告消失了,后来某次升级之后又出现了。解决办法是:假装没看见。

    我觉得这个问题应该可以有解。

    首先,确保你的 R 是最新版本。其次,如果处理中文,就把系统语言调成中文(参见这里的截图)。最后,如果你要处理多字节字符,那么永远、永远不要用 C 作为你的系统区域语言设置(locale),即:永远不要用 Sys.setlocale('LC_ALL', 'C');如果调成 C 能摆脱这个警告,那么几乎一定只是用更大的问题来掩盖了当前的小问题(你可能会丢失多字节字符而自己不知道)。

      yihui 谢大神你好,我在“shinyapps 的中文显示问题”的帖子下面还有个问题向您请教?

        yihui 根据您的建议,我查看了一下我的版本,我的R是3.4.0,现在升级到3.4.2了,RStudio是1.1.383,是最新的。
        系统语言的话,根据您的截图,我查看了控制面板,我的设置一直都是默认的,和您的截图一样。
        Sys.setlocale('LC_ALL', 'C')的这个命令,我也发现不可靠,之前只是跳警告,但该运行的都运行了,用了这个命令的话,含有中文的语句就运行不了了。升级R以后,我又打开了我的Rmd文件,运行了几个命令,发现警告依旧:

        Warning message:
        In strsplit(code, "\n", fixed = TRUE) :
          input string 1 is invalid in this locale

        目前这么多位大神都说无解的话,我也只能忍着继续用Rmarkdown了。

          ChristopherShen 这样的话,有可能是 RStudio 的缺陷。我没有时间深究,但要是哪位莽撞人能在自己的 Windows 上复现你的问题,并且提出一个修正的话,欢迎向 RStudio 提交。我的提示只能给到这里了:https://github.com/rstudio/rstudio/search?utf8=%E2%9C%93&q=%22strsplit%28code%22&type= 我疑心这问题并不难修正,但我实在没这个精力。如果没有其他莽撞人愿意出手,你可以标记一下你的日历,一个月后再来提醒我。

          ChristopherShen 你的问题也许我知道答案,但很多我知道答案的问题我都没时间回答……

            yihui 十分感谢您抽空查看我的提问!?其实您的心情我特别理解,我周围也有很多人经常来问我R方面的问题,我也常常觉得焦头烂额?所以我特别感谢您居然还能在百忙之中顾及到我?

            yihui 跟我好像啊,我有很多问题,都不知道答案,就是没时间问……

              你可以试试在rstudio里修改编码为utf8,目前我这样设置之后win下的rstudio勉强能用了。
              有两处,一个是global里一个是project里

              录了一个设置方法如下

                tctcab 十分感谢您的回答!
                编码方式部分,我以前都是在file的save with encoding里面选择UTF-8,同时set as default for source files,平时写R Script也没问题,最近学着用一用Rmarkdown才出现警告。
                根据您的建议,我在tools的global options里面找了下,在code的saving里看到default text encoding已经是UTF-8了,这个地方我以前没有动过。
                至于您说的project,我没有用过,只是在file里面看到有新建project的按键。

                  ChristopherShen

                  我做了个截图,看上面

                  另外工作流程建议使用project来进行管理,简单来说就一个文件夹就是一个project,这样版本控制以及代码可移植性都更容易管理了。

                    tctcab 根据您的截图,我检查了一下我的设置,发现是相同的。project的功能之前没用过,所以project options是灰的,刚刚创建了一个project,用的是三种方式里的第一种(new directory),版本控制和代码移植的问题,之前没有接触过,目前只是发现新建了一个文件夹,以及,多了一个后缀名为.Rproj的文件,其他功能一切如常。

                    版本控制一定得早点用起来,越早越好,好处实在是太多了。目前最流行的版本控制系统应该是git 和 github了吧。

                    使用版本控制的理由参见SO上的这个回答

                    而且Rstudio完全整合了版本控制,可以方便地使用git和github,完全没有不用的道理。

                    不用就不和你玩了啊!!!