2013-01-16 21 views
6

मैं एक आर ट्यूटोरियल के माध्यम से काम कर रहा हूं और मुझे संदेह है कि मुझे इन कार्यों में से एक का उपयोग करना है, लेकिन मुझे यकीन नहीं है कि (हाँ मैंने उनको शोध किया लेकिन जब तक मैं और नहीं बन जाता आर शब्दावली में धाराप्रवाह वे काफी उलझन में हैं)।सीएसवी फाइलों की एक श्रृंखला की पंक्तियों की संख्या

मेरी कार्य निर्देशिका में एक फ़ोल्डर "specdata" है। Specdata में 001.csv - 300.csv नामक सैकड़ों सीएसवी फाइलें हैं।

जिस फ़ंक्शन पर मैं काम कर रहा हूं उसे सीएसवी फ़ाइलों की इनपुट संख्या के लिए पंक्तियों की कुल संख्या की गणना करनी चाहिए। तो अगर समारोह में तर्क 1:10 है और उन फ़ाइलों में से प्रत्येक दस पंक्तियां हैं, लौट 100

यहाँ मैं अब तक है:

complete <- function(directory,id = 1:332) { 
    setpath <- paste("/Users/gcameron/Desktop",directory,sep="/") 
    setwd(setpath) 
    csvfile <- sprintf("%03d.csv", id) 
    file <- read.csv(csvfile) 
    nrow(file) 
} 

यह काम करता है जब आईडी तर्क एक संख्या है, का कहना है कि

Error in file(file, "rt") : invalid 'description' argument 

इनपुट किए गए आईडी पैरामीटर से पंक्तियों की कुल संख्या गिनती करने के लिए सक्षम होने के लिए मुझे क्या करना चाहिए: 17. लेकिन, अगर मैं इनपुट कहना 10:50 एक तर्क के रूप में, मैं एक त्रुटि प्राप्त?

nrows <- sapply(csvfile, function(f) nrow(read.csv(f))) 
sum(nrows) 

उदाहरण के लिए, यहाँ complete समारोह के पुनर्लेखन है: ताकि आप फ़ाइलों पर पाश की जरूरत

उत्तर

9

read.csv, बस एक फ़ाइल को पढ़ने की उम्मीद, ऐसा करने का एक आर मुहावरेदार तरीके से उपयोग करने sapply है :

complete <- function(directory,id = 1:332) { 
    csvfiles <- sprintf("/Users/gcameron/Desktop/%s/%03d.csv", directory, id) 
    nrows <- sapply(csvfiles, function(f) nrow(read.csv(f))) 
    sum(nrows) 
} 
+0

धन्यवाद। यदि आपके पास एक सेकेंड है तो बहुत कम क्यू का पालन करें। 1) मैं इस लाइन को कहां रखूं? समारोह के भीतर "पूर्ण" या उसके बाद? 2) यदि इसके बाद, क्या मुझे ऑब्जेक्ट csvfile को दायरे के लिए फिर से घोषित करने की आवश्यकता नहीं है? 3) आपका पैरामीटर "फ़ंक्शन (एफ)" - क्या यह उस स्थान का नाम है जिसे मैंने अपने स्थान पर बनाया है? यानी nrows <- sapply (csvfile, पूर्ण (f # यहां क्या जाता है?) nrow (read.csv (f) जैसा कि आप इसमें कोई संदेह नहीं कर सकते कि मैं इस –

+0

के साथ थोड़ा संघर्ष कर रहा हूं, मैंने अपना जवाब संपादित कर लिया है। यह भी ध्यान दें कि आपका मूल कार्य कभी भी काम करने वाली निर्देशिका को रीसेट नहीं करता है, यह गलत है। –

+0

धन्यवाद एक टन मैं इसके लिए वास्तव में आभारी हूं। यह काम कर चुका है। अब इसे देखकर मैं इसे समझ सकता हूं। –

1

होमवर्क समस्याओं को आमतौर पर इस तरह टैग किया जाता है, हालांकि मुझे नहीं पता कि यह आवश्यक है, लेकिन यह स्पष्ट रूप से होमवर्क है।

लिखित रूप में आपका कार्य यह मानता है कि आईडी एक वेक्टर नहीं है (डिफ़ॉल्ट मान पूर्णांक के वेक्टर होने के बावजूद)।

इसे * लागू कार्यों (अधिक संक्षिप्त और सामान्य), या यहां तक ​​कि एक स्पष्ट लूप का उपयोग करने के लिए बदलें। आईडी वेक्टर में प्रत्येक तत्व के लिए, आपको उस फ़ंक्शन को कॉल करना होगा जो उस फ़ाइल को खोलता है और अवलोकनों की गणना करता है।

This stackoverflow post * लागू कार्यों के बीच अंतरों का एक अच्छा स्पष्टीकरण है।

+3

[होमवर्क टैग बहिष्कृत है] (http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially -डेप्रेटेड) – plannapus

+0

ठीक है, धन्यवाद। मैंने देखा कि क्या वह faq में कवर किया गया था, लेकिन इसे नहीं देखा था।मुझे अभी भी लगता है कि यह जानना उपयोगी है कि यह होमवर्क कब है, क्योंकि मैं काम पर कुछ खत्म करने की कोशिश करने वाले व्यक्ति के लिए एक पूर्ण उत्तर देने के लिए तैयार हूं, लेकिन होमवर्क के लिए संकेत और दिशा देना चाहूंगा। –

+0

यह वास्तव में एक अच्छा मुद्दा है, और मैंने यह भी सोचा कि वे इसे faq में जोड़ देंगे क्योंकि अधिकांश उपयोगकर्ता ब्लॉग या मेटासे नहीं पढ़ते हैं। – plannapus

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