2016-12-03 19 views
9

ABD'de ingilizce olmayan bir yerel ayarı olan R 3.3.2 ile c() tuhaf bir davranışla karşı karşıya kaldım. Adlandırılmış vektörlerin isimlerini UTF-8'e dönüştürür. Bu sorun çoğu insan için sorunlu değilR - c(), adlandırılmış vektörlerin adlarını beklenmedik biçimde UTF-8'e dönüştürür. Bu bir hata mı?

x <- "φ" 
names(x) <- "φ" 

Encoding(names(x)) 
#> [1] "unknown" 

Encoding(names(c(x))) 
#> [1] "UTF-8" 

Düşünce, o (: http://adv-r.had.co.nz/Subsetting.html#applications örnek buradadır) arama tabloları vektörleri adlandırılan kullanır olanlar için önemlidir. Ben de the behavior of dplyr's select() function ile sıkışmış olan benim.

Bu davranışın bir hata mı, yoksa tasarım mı olduğu konusunda emin değilim. R çekirdeğine bir hata raporu göndereyim mi? Hala sisteminizde names(c(x)) == names(x) görmelisiniz

sessionInfo() 
#> R version 3.3.2 (2016-10-31) 
#> Platform: x86_64-w64-mingw32/x64 (64-bit) 
#> Running under: Windows >= 8 x64 (build 9200) 
#> 
#> locale: 
#> [1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932 LC_MONETARY=Japanese_Japan.932 
#> [4] LC_NUMERIC=C     LC_TIME=Japanese_Japan.932  
#> 
#> attached base packages: 
#> [1] stats  graphics grDevices utils  datasets methods base  
#> 
#> loaded via a namespace (and not attached): 
#> [1] tools_3.3.2 
+0

Ayrıca 3.3.2 kullanıyorum, iki Kodlama çağrısının çıktısı benim PC'mde aynı 'UTF-8'. – mt1022

+0

@ mt1022 Onay için teşekkürler. Sanırım bu sorun sadece Windows'da gerçekleşiyor. Windows PC kullanıyor musunuz? – yutannihilation

+0

Hayır. Mac kullanıyorum. – mt1022

cevap

2

:

İşte benim R çevre hakkında bilgiler. c() ile kodlama değişikliği istem dışı olabilir, ancak kodunuzu çoğu senaryoda etkilememelidir. UTF-8 yerel yok Windows'ta

,, en güvenlisi ilk enc2utf8() aracılığıyla UTF-8-tüm dizeleri dönüştürmek ve sonra UTF-8 olarak kalmaktır. Bu ayrıca güvenli aramaları da sağlayacaktır.

Language symbols (dplyr's group_by()'da kullanıldığı gibi) tamamen farklı bir sorundur. Bazı nedenlerden dolayı her zaman yerel kodlamada yorumlanır. (as.name(names(c(x)))'u deneyin.) Ancak, bunların UTF-8'e sahip olması ve as.name() numaralı telefonu aramadan önce yerel görünüme dönüştürülmesi hala en iyisidir. Dplyr'ın yapması gereken şey bu, henüz tam orada değiliz.

Benim önerim, Windows'ta dplyr kullanırken sütun adları için yalnızca ASCII karakterlerini kullanmaktır. ASCII olmayan sütun içerikleri için tidyr::spread() güveniyorsanız, bazı disiplin gerektirir. UTF-8 ile doğal olarak çalışan bir sisteme (OS X veya Linux) geçiş yapmayı da düşünebilirsiniz.

+0

Teşekkürler! Çoğu durumda, herhangi bir problemle karşılaşmayacağımı biliyorum. R, UTF-8'e [burada] (http://stat.ethz.ch/R-manual/R-devel/library/base/html/Encoding. html). Tek bildiğim dplyr'ın 'group_by()' ve 'distinct()' dır. Her neyse, önerin benim için doğru ve makul görünüyor. Teşekkürler. – yutannihilation