2012-11-30 7 views
18

में अधिक पसंद कर रहे हैं 'help("'") से:क्यों "आर

सिंगल और डबल कोट्स परिसीमित चरित्र स्थिरांक वे interchangeably उपयोग किया जा सकता है लेकिन दोहरे उद्धरण चिह्नों पसंद किया जाता है (और चरित्र स्थिरांक दोहरे उद्धरण चिह्नों का उपयोग कर मुद्रित कर रहे हैं)। है, तो एकल उद्धरण सामान्य रूप से केवल चरित्र डबल उद्धरण युक्त स्थिरांक परिसीमित करने के लिए इस्तेमाल किया जा सकता है।

वे परस्पर विनिमय, क्यों दोहरे उद्धरण चिह्नों पसंद किया जाता है? मैं अभी तक एक diffe को खोजने के लिए है कर रहे हैं अपने स्वयं के उपयोग में उनके बीच किराए पर लें। विशेष रूप से आश्चर्य की बात है कि मिश्रित चरित्र वैक्टर स्वीकार्य हैं:

> c("a",'b',"c") 
[1] "a" "b" "c" 

संपादित

मैं वास्तव में दो सवाल यहाँ पूछ रहा हूँ, मुझे लगता है:

  1. किसी भी स्थितियों वहाँ रहे हैं जो ' और में " अलग व्यवहार करते हैं?
  2. यदि नहीं, तो " क्यों सम्मेलन द्वारा पसंदीदा संस्करण के रूप में चुना गया था?

उत्तर अब तक (2) से संबंधित हैं, लेकिन (1) कम से कम ब्याज है।

+1

एक संभावना:। backquotes और लहजे की तरह सामान्य रूप से प्रयुक्त पात्रों के साथ और एकल पाठ डेटा के भीतर इस्तेमाल उद्धरण (जैसे नाम के रूप में के साथ भ्रम की संभावना उतनी ही कम , जैसे "O'Reilly") –

+2

जहाँ तक मैं कह सकता हूं इस दस्तावेज़ 14 जून, 2005 को जोड़ा गया है ब्रायन रिप्ले द्वारा: https://github.com/wch/r-source/commit/d5871a12861d420cc7821e7523dfcd57e1316fcf#src/library/base/man/Quotes.Rd –

उत्तर

7

मेरा अनुमान है कि "एकल उद्धरण" अक्सर एस्ट्रोफ़ेस के रूप में होता है, इसलिए डबल-कोट्स पसंद करते हुए एक एस्ट्रोफ़े के साथ चीजों को गड़बड़ करने का मौका कम हो जाएगा।

12

मुझे किसी भी मामले की जानकारी नहीं है जहां एकल-उद्धरण युगल से अलग हैं। मुझे लगता है कि वरीयता पठनीयता के कारण है और बैक-टिक्स के साथ सिंगल कोट्स के संभावित भ्रम से बचने के लिए अलग-अलग हैंडल हैं। गीलेवेयर में आंखों के मस्तिष्क तंत्र के लिए शायद एक क्वोट के साथ जोड़ा गया एक बेमेल बैक-टिक लेने के लिए शायद यह बहुत मुश्किल है।

> `newfn` <- function() {} 
> newfn 
function() {} 
> "newfn" <- function() {} 
> newfn 
function() {} 
> 'newfn' <- function() {} 
> newfn 
function() {} 
> var <- c(`a`, "b", 'c') 
Error: object 'a' not found 
> var <- c("b", 'c') 
> var 
[1] "b" "c" 
> a <- 1 
> identical(`a`, a) 
[1] TRUE 

तो नाम के लिए काम के लिए, वे (रों-उद्धरण, डी-उद्धरण, और बैक-टिक) सभी असाइनमेंट की एलएचएस पर एक ही function से नियंत्रित किया जाता है, लेकिन गैर उद्धृत a और बैक-टिक a कमांड लाइन पर समान हैं और उद्धृत "ए" या 'ए' से अलग हैं।

अन्य स्थिति जहां अंतर हो सकता है डेटा इनपुट में है। व्यक्तियों के नामों में एकल उद्धरण हो सकते हैं और ऐसा नहीं है कि आप read.table फ़ंक्शन द्वारा दो अलग-अलग प्रकार के उद्धरणों के संचालन की समीक्षा करना चाहें। डिफ़ॉल्ट रूप से यह दोनों प्रकार के उद्धरणों का उपयोग करता है, लेकिन quote="\"" सेट करके सिंगल कोट्स की उद्धरण कार्रवाई को "बंद करना" आवश्यक हो सकता है ताकि आपको डेटा के बड़े ब्लब्स गलती से एक टेक्स्ट फ़ील्ड में परिवर्तित न हो जाएं। count.fields समारोह read.table के रूप में ही चूक है, तो यह समझ में आता है बेमेल एकल उद्धरण से छोटा लाइनों के लिए जाँच करने के लिए इस के साथ एक प्रारंभिक रन करने के लिए कारण:

table(count.fields('filnam.ext')) 
2

जो लोग के आदी रहे हैं के लिए भ्रम से बचने के सी भाषा के परिवार (सी, सी ++, जावा) में प्रोग्रामिंग, जहां में एकल उद्धरण और डबल कोट्स का अर्थ है। ए सी प्रोग्रामर एक अक्षर के रूप में 'ए' को पढ़ता है और "ए" को एक चरित्र स्ट्रिंग के रूप में पढ़ता है जिसमें 'ए' अक्षर होता है जिसके बाद शून्य वर्ण स्ट्रिंग को समाप्त करता है। आर में कोई चरित्र डेटा प्रकार नहीं है, केवल वर्ण तार हैं। अन्य भाषाओं के साथ स्थिरता के लिए यह में मदद करता है यदि चरित्र तार डबल कोट्स द्वारा सीमित हैं। आर में सिंगल कोट संस्करण सुविधा के लिए है। अधिकांश कीबोर्ड पर आपको एक सिंगल कोट टाइप करने के लिए Shift कुंजी का उपयोग करने की आवश्यकता नहीं है, लेकिन आपको के लिए दोहरी बोली लगाने की आवश्यकता है।

+1

* अन्य भाषाओं यह मदद करता है के साथ निरंतरता के लिए यदि चरित्र तार डबल कोट्स * द्वारा सीमित हैं। खैर, यह निर्भर करता है कि आप किस भाषा के बारे में बात कर रहे हैं। पर्ल प्रोग्रामर को सिंगल कोट्स का उपयोग करने के लिए और अधिक सुसंगत लगेगा क्योंकि आर स्ट्रिंग का कभी व्याख्या नहीं किया जाता है। http://www.dummies.com/how-to/content/contrasting-single-and-double-quotes-in-perl.html – flodel

3

पहला सवाल के संबंध में, वहाँ रहे हैं किसी भी परिस्थितियाँ होती हैं जिनमें 'और' अलग तरह से? व्यवहार करते हैं, मुझे लगता है कि यह ध्यान रखें कि

के बाद से
identical("a", 'a') 
TRUE 

आर उपयोगकर्ताओं (पैकेज डेवलपर्स सहित) कोई तरीका नहीं है महत्वपूर्ण है अंतर है, इसलिए एक या दूसरे के लिए अलग व्यवहार बनाने का कोई रास्ता नहीं बताने का

+0

यह सच है, लेकिन अभी भी एक पार्सर अंतर हो सकता है। –