[R-SIG-Mac] accented vowels

Duncan Murdoch murdoch.duncan at gmail.com
Tue Aug 16 01:06:29 CEST 2011


On 11-08-15 2:42 PM, Denis Chabot wrote:
> Hi,
>
> I usually do not give second thought to accented vowels and R handles everything fine thanks to UTF8 being used in my R scripts. But today I have a problem. Accented vowels do not behave properly when they were imported into R using list.files.
>
> Maybe this is because  OS X (I'm using 10.6.8) still uses MacRoman for file names, though visually the names seem to have been read correctly into R.
>
> An example is better than words:
>
> sessionInfo()
> R version 2.13.1 (2011-07-08)
> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
>
> locale:
> [1] fr_CA.UTF-8/fr_CA.UTF-8/C/C/fr_CA.UTF-8/fr_CA.UTF-8
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
>
> This does not cause problem:
> a = c("1_MO2 crevettes po2crit.Rda", "1_MO2 soles Sète sda.Rda", "1_MO2 turbots po2crit.Rda"); a
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 soles Sète sda.Rda"    "1_MO2 turbots po2crit.Rda"
>
> a2 = gsub(" Sète", "S", a); a2
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 solesS sda.Rda"        "1_MO2 turbots po2crit.Rda"
>
>
> but if instead of creating the vector within the R script, I read it as a series of file names, the substitution does not work. I am sorry that I cannot make this a reproducible example as it requires the 3 files to exist on your computer, but you could create 3 dummy files having the same names in the directory of your choice.
>
> don = file.path("données/")
> b = list.files(path = don, pattern = "1_MO2"); b
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 soles Sète sda.Rda"     "1_MO2 turbots po2crit.Rda"
>
> b2 = gsub(" Sète", "S",  b); b2
> [1] "1_MO2 crevettes po2crit.Rda" "1_MO2 soles Sète sda.Rda"     "1_MO2 turbots po2crit.Rda"
>
> I am puzzled and also "stuck". For now I'll modify the file name, but I need to be able to handle such names at some point.
>
> Any advice?


Possibly your system really is using MacRoman or some other local 
encoding; in that case, iconv(x, "", "UTF-8") should convert from the 
local encoding to UTF-8.

I think declaring everything to be UTF8 may be sufficient.  When I use 
list.files(), I see the encoding listed as "unknown", but

x <- list.files()
Encoding(x) <- "UTF-8"

works.  However, the iconv() method should be safer.

Duncan Murdoch



More information about the R-SIG-Mac mailing list