طرق لقراءة فقط تحديد الأعمدة من ملف إلى r؟ (وسيلة سعيدة بين "read.table" و "المسح الضوئي"؟) [مكررة

StackOverflow https://stackoverflow.com/questions/2193742

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لدي بعض ملفات البيانات المحددة الكبيرة جدًا و أريد معالجة أعمدة معينة فقط في ص دون أخذ الوقت والذاكرة لإنشاء ملف data.frame للملف بأكمله.

الخيارات الوحيدة التي أعرفها read.table وهو مضيعة للغاية عندما أريد فقط بضع أعمدة أو scan الذي يبدو منخفضًا جدًا لما أريد.

هل هناك خيار أفضل ، إما مع R Pure R أو ربما استدعاء إلى بعض البرامج النصية الأخرى Shell للقيام باستخراج العمود ثم استخدام المسح أو القراءة. (الذي يؤدي إلى السؤال كيفية استدعاء البرنامج النصي shell والتقاط إخراجه في r؟).

هل كانت مفيدة؟

المحلول

أحيانًا أفعل شيئًا كهذا عندما يكون لدي البيانات في ملف علامة تبويب:

df <- read.table(pipe("cut -f1,5,28 myFile.txt"))

هذا يتيح cut قم باختيار البيانات ، والذي يمكن أن يفعله دون استخدام الكثير من الذاكرة على الإطلاق.

يرى اقرأ فقط عدد محدود من الأعمدة لإصدار R الخالص ، باستخدام "NULL" في ال colClasses حجة ل read.table.

نصائح أخرى

احتمال واحد هو الاستخدام pipe() بدلاً من اسم الملف ولديه awk أو مرشحات مماثلة تستخرج فقط الأعمدة التي تريدها.

يرى help(connection) لمزيد من على pipe والأصدقاء.

تعديل: read.table() يمكنك أيضًا القيام بذلك نيابة عنك إذا كنت صريحًا جدًا بشأن colclasses - وهي قيمة خالية لعمود معين تتخطى العمود alltogether. يرى help(read.table). لذلك هناك حل في قاعدة R بدون حزم أو أدوات إضافية.

أعتقد أن نهج ديرك مستقيم إلى الأمام وسرعة. البديل الذي استخدمته هو تحميل البيانات في sqlite التي يتم تحميلها بشكل أسرع بكثير من read.table () ثم سحب ما تريد فقط. الحزمة SQLDF () تجعل هذا كل شيء سهل للغاية. هذا رابط إلى إجابة سابقة للمكدس التي تعطي أمثلة رمز لـ SQLDF ().

ربما يكون هذا أكثر مما تحتاج ، ولكن إذا كنت تعمل كبير جدا مجموعات البيانات بعد ذلك قد تكون إلقاء نظرة على حزمة hadoopstreaming الذي يوفر روتينًا خريطة باستخدام هادوب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top