2011-01-31 13 views
8

एक बहुत ही सरल आर स्क्रिप्ट एक टेक्स्टफाइल "0.txt" में आरोही पंक्ति अनुक्रमणिका जोड़ती है और इसमें हेडर "टाइम" भी जोड़ती है। कि डेटा एक फ़ाइल "0-edit.txt"आर स्क्रिप्ट में फ़ाइल नामों को फिर से कैसे करें?

data<-read.table("0.txt", header=TRUE,sep=",",row.names= NULL); 
colnames(data)[1] = "time" 
write.table(data,quote=FALSE,sep=", ","0-edit.txt"); 

मान लें करने के लिए लिखा है के बाद मैं 0.txt, 1.txt, 2.txt बुलाया 4 फ़ाइलें, ... एक ही फ़ोल्डर में है, कैसे क्या मैं अपनी लिपि में उन फाइल नामों को फिर से चलाने के लिए काउंटर (या कुछ और) का उपयोग कर सकता हूं?

उत्तर

12
for(i in 0:3) { 
    infile <- paste(i,".txt",sep="") 
    outfile <- paste(i,"-edit.txt",sep="") 

    data <- read.table(infile,header=TRUE,sep=",",row.names=NULL) 
    colnames(data)[1] = "time" 
    write.table(data,quote=FALSE,sep=", ",outfile) 
} 
+0

आपको बहुत धन्यवाद, पेस्ट फ़ंक्शन मुझे किसी भी तरह से बच गया –

+1

@ मार्टिन: आपका स्वागत है। आपको 'file.path' आसान भी मिल सकता है। –

3

आम तौर पर, आप dir() का उपयोग एक दिया निर्देशिका में फ़ाइलों को प्राप्त करने के लिए, और फ़ाइलों .txt तक सीमित करने select उपयोग कर सकते हैं।

file.dir <- "/path/to/files" 
for(infile in dir(file.dir, pattern="\\.txt$")) { 
    outfile <- gsub("\\.txt$","-edit\\.txt", infile) 

    data <- read.table(infile,header=TRUE,sep=",",row.names=NULL) 
    colnames(data)[1] = "time" 
    write.table(data,quote=FALSE,sep=", ",outfile) 
} 
12

यहाँ lapply का उपयोग कर एक पाश के बिना एक समाधान है:

infiles <- dir(pattern='\\.txt$') 

change.files <- function(file){ 
    data <- read.table(file, header=TRUE, sep=",", row.names=NULL) 
    colnames(data)[1] = "time" 
    write.table(data, quote=FALSE, sep=", ", sub("\\.txt$","-edit.txt", file)) 
} 

lapply(infiles , change.files) 

मेरे लिए इस दृष्टिकोण का असली लाभ यह है कि आप आसानी से mclapply का उपयोग कर (मल्टीकोर पैकेज से) समानांतर में चला सकते हैं के बजाय है lapply। या बर्फ से parLapply। मेरे लिए यह अच्छा लगता है।

+0

यह सिर्फ एक और काम के लिए आसान था और मुझे सहमत होना है, यह सुरुचिपूर्ण है –

6

इस प्रयास करें:

files <- list.files(path="", pattern=".txt", all.files=T, full.names=T) 
for (file in files) { 
## do stuff 
} 

आप पैटर्न मिलान के लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं, इसलिए यदि आप पाठ फ़ाइलों के बहुत सारे है, लेकिन केवल संख्यात्मक नाम, उपयोग "[0-9] .txt साथ लोगों को चाहते हैं "या" [0-3] .txt "।

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