2012-12-18 16 views
12

में डेटा-फ्रेम का नाम कैसे बदलूं, मैं आर के साथ प्रोग्रामिंग के लिए बहुत नया हूं, लेकिन मैं निर्देशिका के लिए कई फाइलों में पढ़ने की कोशिश कर रहा हूं और उन्हें प्रत्येक अद्वितीय नाम देता हूं। मैं आर (पैकेज डीपीआईआर) में डेंड्रोक्रोनोलॉजी प्रोग्राम लाइब्रेरी और read.tucson फ़ंक्शन में फ़ाइलों को पढ़ रहा हूं। हालांकि मैं एक विशिष्ट पैकेज का उपयोग कर रहा हूं, मुझे लगता है कि मेरा प्रश्न काफी सामान्य है:मैं फॉर-लूप

लूप के भीतर, मैं प्रत्येक व्यक्तिगत फाइल नाम के साथ "t" को संयोजित करके फ़ाइलों को बनाना चाहता हूं। इसलिए, अगर मेरी निर्देशिका में "2503" नाम की एक फ़ाइल है, तो मैं "t2503" नामक आर में डेटाफ्रेम बनाना चाहता हूं। इसके बाद, मैं प्रत्येक डेटाफ्रेम पर r.tucson फ़ंक्शन का उपयोग करने में डेटा को पढ़ना चाहता हूं। डेटाफ्रेम में रीड-इन डेटा को असाइन करने के बजाय, मैं डेटा के साथ संयोजन को ओवरराइट कर रहा हूं। क्या कोई मुझे यह जानने में मदद कर सकता है कि मुझे कौन सा कदम गुम है?

#set to appropriate directory 
setwd("C:/work") 

#get a list of files in the directory 
files <- list.files() 
numfiles <- length(files) 

for (i in 1:numfiles) 
{ 
    name<-paste("t",files[i],sep="") 
    name<-read.tucson(files[i],header=NULL) 
} 

उत्तर

24

मुझे लगता है कि आप इस सवाल का जवाब खुद दे दी है: आप ?assign उपयोग करने के लिए

यहाँ कोड मैं उपयोग करने के लिए कोशिश कर रहा हूँ है। ऐसे ही

कोशिश कुछ:

for (i in 1:5) { 
    assign(paste0("DF", i), data.frame(A=rnorm(10), B=rnorm(10))) 
} 

यह 1 से 5 तक पूर्णांक के माध्यम से लूप और पांच data.frames "DF1" से "DF5" बनाता है। आपके उदाहरण के लिए, आप बस, बदल दिया जाना चाहिए

name<-read.tucson(files[i],header=NULL) 

साथ

assign(name, read.tucson(files[i],header=NULL)) 

नोट तथापि, कि name आर में एक आधार समारोह है, इसलिए मैं एक और नामकरण परंपरा का प्रयोग करेंगे या सिर्फ पहली पंक्ति को छोड़:

assign(paste("t",files[i],sep=""), read.tucson(files[i],header=NULL)) 

मुझे आशा है कि यह वही है जो आप खोज रहे हैं।

+0

आपकी मदद के लिए धन्यवाद! मैंने "असाइन" का उपयोग करने की कोशिश की है जैसा आपने यहां बताया है और यह वही है जो मुझे चाहिए था। धन्यवाद! – user1913921

+5

चेतावनी: जब आप किसी फ़ंक्शन में 'असाइन' का उपयोग करते हैं तो यह इसे शीर्ष स्तर पर उपयोग करने से अलग तरीके से व्यवहार करता है, आपको जल्द ही या बाद में 'env = webobalEnv' की आवश्यकता होगी। – user1666959

+0

यह एक अच्छी सलाह है। यदि ओपी उस पर अधिक जानकारी चाहता है, तो वह [यहां] देख सकता है (http://stackoverflow.com/questions/9801208/assign-a-function-in-a-loop)। –