2015-02-12 10 views
6

अगर मैंआर यूनिकोड/यूटीएफ -8 को कैसे संभालता है?

`Δ` <- function(a,b) (a-b)/a 

बारे में तो मैं इतने लंबे समय के रूप में यह बैकटिक में संलग्न है U+394 शामिल कर सकते हैं। (इसके विपरीत, Δ <- function(a,b) (a-b)/aunexpected input in "�" के साथ विफल रहता है।) तो स्पष्ट रूप से आर यूआरएफ -8 या यूनिकोड या उस तरह कुछ पार्स करता है। असाइनमेंट अच्छी तरह से चला जाता है और इसलिए

`Δ`(1:5, 9:13) 

का मूल्यांकन करता है। और मैं Δ(1:5, 9:13) का भी मूल्यांकन कर सकता हूं।

अंत में, यदि मैं winsorise <- function(x, λ=.05) { ... } की तरह कुछ परिभाषित तो λ (U+3bb) एक बैकटिक साथ आर "के लिए शुरू की" होने की जरूरत नहीं है। मैं बिना किसी समस्या के winsorise(data, .1) पर कॉल कर सकता हूं।


केवल mention आर के प्रलेखन मैं यूनिकोड का मिल सकता है में मेरे सिर पर है। क्या कोई इसे समझता है जो मुझे समझता है - "हुड के नीचे" क्या हो रहा है जब आर को ` को असाइनमेंट को समझने के लिए आवश्यक है, लेकिन एक बार असाइन किए गए ♔ (ए, बी, सी) को पार्स कर सकता है?

+0

आर-internals में: क्या आर उपयोगकर्ता सोचते हैं कि वेरिएबल्स या ऑब्जेक्ट्स प्रतीक हैं जो मान के लिए बाध्य हैं। मुझे लगता है कि आपके द्वारा लिंक किया गया CHARSXP अनुभाग मूल्य है, और आप वास्तव में प्रतीकों के नियमों में रूचि रखते हैं। उसने कहा, मैंने चीनी में लिखे गए आर कोड पर काम किया है, इसलिए मैं डेल्टा को काम करने की उम्मीद करता हूं। –

+1

आर का कौन सा संस्करण आप उपयोग कर रहे हैं/ओएस/क्या लोकेल? मुझे "त्रुटि: \ uxxxx अनुक्रम बैकटिक्स (लाइन 1) के अंदर समर्थित नहीं है" जब एक समारोह को 'Δ' (आज के आर-डेवेल पर परीक्षण किया गया है और विन 7, अंग्रेजी यूके लोकेल के तहत 3.1.0)। –

+0

का कौन सा संस्करण क्या आप उस 'Δ <- फ़ंक्शन (ए, बी) (एबी)/ए' का उपयोग कर रहे हैं? और जब आप कहते हैं कि यह "विफल रहता है", तो आपका क्या मतलब है? क्या आपको वाक्यविन्यास त्रुटि मिलती है? अगर मेरे लिए आर आर संस्करण 3.1.0, x86_64-apple-darwin10.8.0 (64-बिट) 'locale en_US.UTF-8 – MrFlick

उत्तर

1

रिकॉर्ड के लिए, आर-devel के तहत (2015-02-11 r67792), 7 विन, अंग्रेजी ब्रिटेन स्थान, मैं देख रहा हूँ:

options(encoding = "UTF-8") 

`Δ` <- function(a,b) (a-b)/a 
## Error: \uxxxx sequences not supported inside backticks (line 1) 

Δ <- function(a,b) (a-b)/a 
## Error: unexpected input in "\" 

"Δ" <- function(a,b) (a-b)/a  # OK 

`Δ`(1:5, 9:13) 
## Error: \uxxxx sequences not supported inside backticks (line 1) 

Δ(1:5, 9:13) 
## Error: unexpected input in "\" 

"Δ"(1:5, 9:13) 
## Error: could not find function "Δ" 
+0

ठीक है दिलचस्प। मैं उम्मीद नहीं करता कि यह संस्करणों में भिन्न होगा। – isomorphismes

4

मैं क्या हुड के नीचे हो रहा है से बात नहीं कर सकते समारोह के बारे में बनाम समारोह तर्क कहता है, लेकिन this email from Prof. Ripley 2008 से कुछ प्रकाश (नीचे अंश) शेड हो सकता है:

R passes around, prints and plots UTF-8 character data pretty well, but it translates to the native encoding for almost all character-level manipulations (and not just on Windows). ?Encoding spells out the exceptions [...]

कारण आर इस अनुवाद (Windows पर कम से कम) the documentation that the OP linked to में बताया गया है करता है:

Windows has no UTF-8 locales, but rather expects to work with UCS-2 strings. R (being written in standard C) would not work internally with UCS-2 without extensive changes.

?Quotes के लिए R प्रलेखन बताते हैं कि कैसे आप कभी कभी बाहर के वातावरण पात्रों वैसे भी उपयोग कर सकते हैं (जोर जोड़ा):

Identifiers consist of a sequence of letters, digits, the period (.) and the underscore. They must not start with a digit nor underscore, nor with a period followed by a digit. Reserved words are not valid identifiers.

The definition of a letter depends on the current locale, but only ASCII digits are considered to be digits.

Such identifiers are also known as syntactic names and may be used directly in R code. Almost always, other names can be used provided they are quoted. The preferred quote is the backtick (`), and deparse will normally use it, but under many circumstances single or double quotes can be used (as a character constant will often be converted to a name). One place where backticks may be essential is to delimit variable names in formulae: see formula.

एक और तरीका है इस तरह के पात्रों को प्राप्त करने के लिए है, जो यूनिकोड का उपयोग कर रहा है बचने के अनुक्रम (जैसे \u0394 Δ के लिए)। यह आमतौर पर एक बुरा विचार है यदि आप साजिश पर पाठ के अलावा किसी अन्य चीज़ के लिए उस चरित्र का उपयोग कर रहे हैं (यानी, चर या फ़ंक्शन नामों के लिए ऐसा न करें; cf. यह उद्धरण the R 2.7 release notes से है, जब वर्तमान यूटीएफ -8 में से अधिकांश समर्थन को जोड़ा गया):

If a string presented to the parser contains a \uxxxx escape invalid in the current locale, the string is recorded in UTF-8 with the encoding declared. This is likely to throw an error if it is used later in the session, but it can be printed, and used for e.g. plotting on the windows() device. So "\u03b2" gives a Greek small beta and "\u2642" a 'male sign'. Such strings will be printed as e.g. <U+2642> except in the Rgui console (see below).

मैं इस अपने सवालों के अधिकांश के पते, हालांकि मैं क्यों समारोह नाम और समारोह तर्क उदाहरण आप दे दी है के बीच एक अंतर है पता नहीं है लगता है; उम्मीद है कि उस पर कोई और जानबूझ कर जा सकता है। FYI करें, लिनक्स बताए और बिना किसी त्रुटि के एक समारोह के काम बुला (क्योंकि सिस्टम स्थान UTF-8 है, इसलिए कोई अनुवाद पाए जाते हैं की जरूरत है) के इन अलग अलग तरीकों के सभी पर:

Δ <- function(a,b) (a-b)/a   # no error 
`Δ` <- function(a,b) (a-b)/a  # no error 
"Δ" <- function(a,b) (a-b)/a  # no error 
"\u0394" <- function(a,b) (a-b)/a # no error 
Δ(1:5, 9:13)  # -8.00 -4.00 -2.67 -2.00 -1.60 
`Δ`(1:5, 9:13)  # same 
"Δ"(1:5, 9:13)  # same 
"\u0394"(1:5, 9:13) # same 

sessionInfo() 

# R version 3.1.2 (2014-10-31) 
# Platform: x86_64-pc-linux-gnu (64-bit) 

# locale: 
# LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C    LC_TIME=en_US.UTF-8 
# LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8  LC_MESSAGES=en_US.UTF-8 
# LC_PAPER=en_US.UTF-8 LC_NAME=C     LC_ADDRESS=C 
# LC_TELEPHONE=C   LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C 

# attached base packages: 
# stats graphics grDevices utils datasets methods base 
+0

इस शोध को करने के लिए धन्यवाद। मुझे नहीं पता था कि यूटीएफ -8 के रूप में विंडोज और लिनक्स के बीच इतना महत्वपूर्ण अंतर था, लेकिन यह उन लोगों को बताता है जिन्होंने विफलताओं के साथ टिप्पणी की थी। (और मुझे यह जानकर खुशी हो रही है कि विंडोज़-नेस की तुलना में 32-बिट-नेस की संभावना कम है।) – isomorphismes

+0

धन्यवाद @isomorphismes। मैंने इसे और अधिक सुसंगत बनाने के लिए थोड़ा सा संपादित किया है, लेकिन वही मूलभूत जानकारी है। योग में: किसी भी यूनिकोड से संबंधित अजीबता हमेशा विंडोज़ की गलती होती है, लेकिन 32 बनाम 64 बिट के साथ इसका कोई लेना-देना नहीं है। यह सब यूटीएफ -8 बनाम यूसीएस -2 (एफवाईआई, यदि आप आगे पढ़ते हैं, तो यूसीएस -2 को "बीओएम के साथ यूटीएफ -16LE" भी कहा जाता है)। – drammock

+0

@isomorphismes आर 3.1.2 के तहत (विन 7 64 बिट) 'प्राप्त करें ("Δ") (1,2) 'त्रुटि के बिना निष्पादित होगा – mnel

संबंधित मुद्दे