आर

2012-02-08 5 views
39

में परिवर्तनीय नाम प्रतिबंध आर में एक चर नाम के लिए कौन से वर्ण (और शायद अन्य प्रतिबंध) का उपयोग किया जा सकता है, इस पर प्रतिबंध क्या हैं?आर

(यह सामान्य संदर्भ के चिल्लाती है, लेकिन मैं जवाब खोजने के लिए प्रतीत नहीं कर सकते हैं)

+3

आर पूछे जाने वाले प्रश्न 7.14: http://cran.r-project.org /doc/FAQ/R-FAQ.html#What-are-valid-names_003f – James

+1

आपको यहां चर्चा में रुचि भी हो सकती है: http://stackoverflow.com/questions/8396577/check-if-character-value-is -a-valid-r-object-name/8396658 # 8396658 –

+0

आपको 'read.table' के लिए सहायता पृष्ठ में'? make.names' का लिंक मिलना चाहिए था। सहायता पृष्ठ मुझे हमेशा याद रखने में कठिनाई होती है वह स्वीकार्य बचने वाले वर्णों का वर्णन करती है और उत्तर 'उद्धरण' है। –

उत्तर

31

आप ?make.names से चर्चा की तलाश में हो सकता है:

एक वाक्य रचना मान्य नाम पत्र के होते हैं, संख्याएं और डॉट या अंडरलाइन वर्ण और एक अक्षर से शुरू होता है या डॉट किसी संख्या से नहीं चलता है। ".2way" जैसे नाम वैध नहीं हैं, और न ही आरक्षित शब्द हैं।

मदद फ़ाइल ही में, वहाँ आरक्षित शब्द है, जो कर रहे हैं की एक सूची के लिए एक लिंक है:

यदि किसी और दोहराने थोड़ी देर के लिए समारोह अगले तोड़ने में

सही गलत शून्य Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_ टिप्पणियों से

कई अन्य अच्छे नोट्सको जेम्स द्वारा बिंदु शामिलइस मुद्दे को संबोधित करते हुए और जोश के सूचक को संबंधित SO question को सिंटैक्टिक रूप से मान्य नामों की जांच करने से निपटने के लिए काम करते हैं।

+0

ध्यान दें कि यदि आप अपना वैरिएबल नाम उद्धृत करते हैं तो आप कुछ भी इस्तेमाल कर सकते हैं, उदाहरण के लिए '' TRUE' <-2' मान्य है। मैं इस ठीक से इतना सिंटैक्स का उपयोग :( – James

+0

बेशक नहीं लिख सकते हैं, मेरी समस्या मैं उलटा के लिए गूगल खोज रहा था ("प्रतिबंध") या मूल रूप से * अवैध * पात्रों जब मैं जाना चाहिए था * वैध * पात्रों के लिए खोज कर दिया गया था। –

+1

इसके अलावा, अपने आप पर एक बिंदु मान्य है। '। = 3; प्रिंट (।)' –

19

लगभग कोई नहीं! हास्यास्पद चर नाम बनाने के लिए आप 'असाइन' का उपयोग कर सकते हैं:

assign("1",99) 
ls() 
# [1] "1" 

हां, यह '1' नामक एक चर है। अंकों 1. सौभाग्य से यह पूर्णांक 1 का मूल्य बदल नहीं करता है और आप थोड़ा कठिन काम करने के लिए अपने मूल्य प्राप्त करने के लिए:

1 
# [1] 1 
get("1") 
# [1] 99 

"वाक्यात्मक प्रतिबंध" कुछ लोगों का उल्लेख विशुद्ध रूप से पार्सर द्वारा लगाया जाता है हो सकता है। मूल रूप से, बहुत कम है आप आर ऑब्जेक्ट को कॉल नहीं कर सकते हैं। आप इसे '< -' असाइनमेंट ऑपरेटर के माध्यम से नहीं कर सकते हैं। "प्राप्त करें" आपको नि: शुल्क सेट करेगा :)

+0

क्या 'असाइन' और' get' का उपयोग करके _literally_ कोई प्रतिबंध नहीं है, या आप कुछ में भागते हैं ? कुछ बिंदु पर सीमाओं – joran

+10

मेरा मानना ​​है कि मुहावरा है :-P –

+1

"बहुत हो रस्सी के साथ खुद को लटका" निर्दिष्ट: " 'नाम' पर कोई प्रतिबंध नहीं कर रहे हैं: यह ग एक गैर-वाक्य रचनात्मक नाम हो (देखें 'make.names')। "। यह निश्चित रूप से एक झूठ है: सी = पेस्ट (प्रतिनिधि (अक्षरों, 10000), पतन = ""); आवंटित (ग, 123) का उत्पादन: त्रुटि असाइन में (ग, 123): चर नाम 10000 बाइट्स तक सीमित हैं – Spacedman

2

निम्नलिखित आपके प्रश्न को सीधे संबोधित नहीं कर सकते हैं लेकिन बहुत मददगार हैं। exists() कमांड को देखने के लिए प्रयास करें कि कुछ पहले से मौजूद है या नहीं और इस तरह आप जानते हैं कि आपको अपने चर या फ़ंक्शन के लिए सिस्टम नामों का उपयोग नहीं करना चाहिए। उदाहरण ...

> exists('for') 
    [1] TRUE 

    >exists('myvariable') 
    [1] FALSE 
+0

मुझे समझ में नहीं आता कि यह जवाब क्यों कम किया गया था, मेरे लिए यह किसी भी मामले में जानकारी का उपयोग करने योग्य टुकड़ा है। – Halberdier

0

make.names का उपयोग करना() आधार पैकेज में बनाया मदद मिल सकती है से समारोह:

is_valid_name<- function(x) 
{ 
    length_condition = if(getRversion() < "2.13.0") 256L else 10000L 
    is_short_enough = nchar(x) <= length_condition 
    is_valid_name = (make.names(x) == x) 

    final_condition = is_short_enough && is_valid_name 
    return(final_condition) 
}