के रूप में कई टिप्पणीकर्ताओं का उल्लेख किया है, डेटा फ्रेम कॉलम का नाम बदलने, धीमी है क्योंकि (तुम कैसे करते के आधार पर) 1 और 4 के बीच पूरे data.frame की प्रतियां बनाता है।
DF = data.frame(a=1:2,b=3:4) # base data.frame to demo copies
try(tracemem(DF)) # try() for non-Windows where R is
# faster without memory profiling
colnames(DF)[1] <- "A" # 4 copies of entire object
names(DF)[1] <- "A" # 3 copies of entire object
names(DF) <- c("A", "b") # 1 copy of entire object
`names<-`(DF,c("A","b")) # 1 copy of entire object
x=`names<-`(DF,c("A","b")) # still 1 copy (so not print method)
# What if DF is large, say 10GB in RAM. Copy 10GB just to change a column name?
करने के लिए (शुरू) को समझने क्यों बातें इस तरह से किया जाता है, तो आप शायद आवश्यकता होगी: यहाँ, data.table
के ?setkey
मदद पृष्ठ से, देखा है कि मैं इस व्यवहार को प्रदर्शित करने का सबसे अच्छा तरीका है आर-डेवेल पर संबंधित कुछ चर्चाओं में शामिल होने के लिए। R-devel: speeding up perception और R-devel: Confused about NAMES
उन धागे की मेरे इम्प्रेशनिस्टिक पढ़ने कि है: इतना है कि यह करने के लिए संशोधन कर सकते हैं मूल अधिलेखन से पहले 'बाहर की कोशिश की' जा
कम से कम एक प्रति किया जाता है यहां पर कुछ कर रहे हैं। इस प्रकार, यदि मूल्य-से-पुन: असाइन किए गए कुछ के साथ कुछ गलत है, [<-.data.frame
या names<-
मूल वस्तु को कोई नुकसान किए बिना 'बैक आउट' कर सकता है और त्रुटि संदेश दे सकता है।
आर-कोर के कई सदस्य पूरी तरह से संतुष्ट नहीं हैं कि चीजें अभी कैसे काम कर रही हैं। कई लोगों ने समझाया कि कुछ मामलों में "आर ट्रैक खो देता है"; ल्यूक तिएर्नी इंगित करता है कि उसने अतीत में इस प्रतिलिपि से संबंधित कुछ संशोधनों की कोशिश की है "कुछ मामलों में और हमेशा पीछे हटना पड़ा"; और साइमन Urbanek संकेत "कुछ बातें भी आ रहा हो सकता है" कि
(जैसा कि मैंने कहा, हालांकि, कि सिर्फ इम्प्रेशनिस्टिक है: मैं बस आर के के विवरण के बारे में पूरी बातचीत का पालन करने में सक्षम नहीं कर रहा हूँ आंतरिक)
भी प्रासंगिक, मामले में आप इसे नहीं देखा है, तो यहां आपको names(z)[3] <- "c2"
की तरह कुछ "वास्तव में" काम करता है:!
# From ?names<-
z <- "names<-"(z, "[<-"(names(z), 3, "c2"))
नोट: इनमें से अधिकतर उत्तर मैथ्यू डॉउले के जवाब this other question से आता है। (मैंने सोचा कि यह इसे यहां रखने लायक था, और इसे कुछ और जोखिम प्रदान करना, क्योंकि यह आपके अपने प्रश्न के लिए बहुत प्रासंगिक है)।
विचित्र रूप से, मैं बस इसके बारे में पढ़ रहा था। मुझे विश्वास है कि यह वास्तव में df _twice_ की प्रतिलिपि बना सकता है। यदि आप 2.15.0 का उपयोग कर रहे हैं, तो पैकेज ** डेटाफ्रेम ** को स्थापित करने और लोड करने का प्रयास करें और देखें कि इससे कोई मदद मिलती है या नहीं। – joran
मैथ्यू डॉउल ने यह बहुत अच्छी तरह से बताया [यहां] (http://stackoverflow.com/questions/10655438/rename-one-named-column-in-r/10655997#10655997) और 'data.table' पैकेज के साथ समाधान प्रदान करता है । – Chase
धन्यवाद, मैं पहले से ही 'data.table' का उपयोग करता हूं (और मुझे चिपचिपा परिस्थितियों से बाहर निकालने के लिए मैथ्यू डॉउल का ऋणी हूं!) - यहां मैं क्या हो रहा है इसके बारे में स्पष्टीकरण के बाद था ... और आदर्श रूप से क्यों। क्या जवाब वास्तव में सिर्फ "डेटा.फ्रेम बुरी तरह कोडित है"? – Ina