r - Script med utf-8 tekst kører forskelligt fra RStudio og kommandolinje i Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder med filer, der indeholder tekst på hindi og analyserer dem. Jeg skrev min kode i Rstudio og udførte den uden mange problemer. Men nu skal jeg udføre det samme script fra kommandolinjen ved hjælp af R.exe/Rscript.exe og det Fungerer ikke på samme måde. Jeg har kørt et simpelt script fra både RStudio og terminalen:


n\_p<-'नाम'

Encoding(n\_p)

gregexpr(n\_p,c('adfdafc','नाम adsfdfa'))
sessionInfo()


Output i RStudio:


> n\_p<-'नाम'
> 
> Encoding(n\_p)
[1] "UTF-8"
> 
> gregexpr(n\_p,c('adfdafc','नाम adsfdfa'))
[**1**]
[1] -1
attr(,"match.length")
[1] -1

[**2**]
[1] 1
attr(,"match.length")
[1] 3

> sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86\_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7600)

Matrix products: default

locale:
[1] LC\_COLLATE=English\_India.1252  LC\_CTYPE=English\_India.1252   
[3] LC\_MONETARY=English\_India.1252 LC\_NUMERIC=C                  
[5] LC\_TIME=English\_India.1252    

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

other attached packages:
[1] rJava\_0.9-10

loaded via a namespace (and not attached):
[1] compiler\_3.5.0 tools\_3.5.0   


Output med R.exe i cmd (Til fejlfinding. Rscript.exe giver en lignende, hvis ikke identisk output)


> n\_p<-'à☼"à☼\_à☼r'
>
> Encoding(n\_p)
[1] "latin1"
>
> gregexpr(n\_p,c('adfdafc','à☼"à☼\_à☼r adsfdfa'))
[**1**]
[1] -1
attr(,"match.length")
[1] -1

[**2**]
[1] 1
attr(,"match.length")
[1] 9

> sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86\_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7600)

Matrix products: default

locale:
[1] LC\_COLLATE=English\_India.1252  LC\_CTYPE=English\_India.1252
[3] LC\_MONETARY=English\_India.1252 LC\_NUMERIC=C
[5] LC\_TIME=English\_India.1252

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

loaded via a namespace (and not attached):
[1] compiler\_3.5.0


Jeg har forsøgt at ændre lokaliteter, men Sys.setlocale nægter at fungere ordentligt. I nogle tilfælde giver gregexpr en fejl, når den ikke kan analysere ikke ASCII-kode. Og endelig, når det løber uden fejl, matcher det ikke ordentlige udtryk korrekt. Jeg kan ikke give et reproducerbart eksempel for øjeblikket, men jeg vil prøve senere.


Hjælp.

Bedste reference


Du skal sikre, at R kører i en passende lokalitet:


Running rterm use: Sys.getlocale() for at finde din nuværende lokalitet.


Du kan indstille din lokalitet ved hjælp af:


Sys.setlocale(category = "LC\_ALL", locale = "hi-IN")

# Try "hi-IN.UTF-8" too...


Du kan finde lokalnavne her, MSDN og her. [10] [11] [12]


Hvis du har den korrekte værdi, skal du sætte kommandoen Sys.setlocale() i din ~/.Rprofile.


Referencer



  • [13] https://cran.r-project.org/bin/windows/base/rw-FAQ.html

  • [14] http://withr.me/configure-character-encoding-for-r-under-linux-and-windows/