برای مشاهده یافته ها از کلید Enter و برای خروج از کلید Esc استفاده کنید.

مقایسه ساختمان داده ها

همانطور که احتمالا می دانید، هدف اصلی آر-آکادمی ارائه آموزش ها به شیوه ای است که در برنامه ها و سناریوهای کاربردی مورد استفاده قرار بگیرند. به همین دلیل، از پرداختن به برخی از نکات و مطالبی که به سادگی در منابع دیگر یافت می شوند، تا ضرورتی وجود نداشته باشد، پرهیز می شود. در واقع، گروه مدرسان آر-آکادمی تلاش می کنند تا براساس تجربیاتی که در طی سال ها اندوخته اند، مطالب آموزشی را به گونه ای طراحی و تدوین کنند تا مخاطبین و دانشجویان بتوانند از آن ها برای حل مشکلات واقعی که در برنامه نویسی R با آن مواجه می شوند، استفاده نمایند. به همین دلیل تمرکز اصلی را بر مباحث مهم و کاربردی قرار می دهیم و در طی مسیر و به فراخور مباحث، هر زمانی احتیاج به بررسی بیشتر مطالب پایه ای باشد، به آن ها اشاره خواهیم کرد.

چه ساختمان داده ای مناسب است؟

در طی بررسی ساختمان داده های مختلف، به کاربردهای آن ها هم اشاره کردیم ولی در این قسمت به صورت ویژه تری به این موضوع می پردازیم. در واقع، اگرچه ممکن است در برنامه های کوچک و آزمایشی، نوع ساختمان داده انتخابی چندان مهم نباشد و صرف اینکه بتواند مشکل ما را حل کند، دلیل کافی برای استفاده از آن باشد ولی زمانیکه به برنامه های بزرگتر تجاری و حتی پژوهشی می رسیم، جزییات تعیین کننده هستند.

از آنجاییکه بهتر و برتر بودن یک موضوع نسبی است، نمی توان به صورت قطعی مشخص کرد که چه ساختمان داده ای بهتر است بلکه براساس کاربردهای مختلف و نوع داده هایی که با آن ها سر و کار داریم، در هر موقعیت و براساس معیارهای مختلف ممکن است گزینه مناسب متفاوت باشد.

با اینحال، در این قسمت نگاهی دقیق تر به نقاط قوت ساختمان داده های مختلف خواهیم داشت تا در زمان استفاده از آن ها با دیدی جامع تر گزینه مناسب را انتخاب کنیم.

ویژگی های ساختمان داده های مختلف در R

از دیدگاه انعطاف پذیری، کارایی و چند منظوره بودن، لیست ها در صدر جدول قرار می گیرند و به صورت داینامیک (پویا) فضای مورد نیاز برای ذخیره داده ها را اختصاص می دهند. دیتافریم هم در واقع همان لیست است با این تفاوت که هر عنصر در آن باید (در قالب) یک بردار باشد. البته متدهایی هم معرفی شده اند که اجازه می دهند مشابه ماتریس به عناصر دیتافریم ها دسترسی داشت.

آرایه را هم می توان همان بردار دانست که یک ویژگی اختصاصی به عنوان بعد (dimension) به آن اضافه می شود. همانطور که پیشتر راجع به آن بحث شد، تمامی عناصر یک بردار (و البته آرایه) باید از یک نوع باشند.

همانطور که گفته شد، دیتافریم ها در واقع لیستی از بردارها هستند و بر همین اساس تا اندزه ای از قابلیت ها و انعطاف پذیری لیست بهره برده اند. شاید مهمترین قابلیت دیتافریم، توانایی آن در ذخیره داده هایی با انواع مختلف می باشد ولی محدودیت هم اندازه بودن اندازه بردارها در دیتافریم ممکن است در مواردی به عنوان یک ویژگی دست و پا گیر به حساب بیاید.

از دیدگاه مصرف حافظه، برای ذخیره داده ها یکسان، یک لیست فضای به مراتب بیشتری را نسبت به یک بردار اشغال می کند و این مساله می تواند هزینه های سرباری برای برنامه به دنبال داشته باشد. از این رو، دسترسی به عناصر لیست وابسته به تعداد عناصر آن است و هرچه تعداد آیتم های داده ای بیشتر شود، برای انجام این عملیات زمان بیشتری صرف می شود ولی این زمان برای مواردی که داده ها در قالب بردار ذخیره شوند، همواره مقدار ثابتی خواهد بود. همچنین، از همین نقطه نظر، ماتریس از دیتافریم کاراتر است چرا که حافظه کمتری برای ذخیره داده ها نیاز دارد. دلیل این مساله هم این است که دیتافریم اطلاعات اضافه ای هم درباره خصوصیات داده ها و ساختار خودشان ذخیره می کنند.

البته، علاوه بر ساختمان داده ای ذکر شده، ساختاری با نام جدول (data table) هم وجود دارد که در مواردی که با دیتاست ها بزرگ سر و کار داریم، از دیتافریم ها بسیار سریعتر هستند. اگرچه این ساختار به عنوان یک نمونه اختصاصی برای زبان R طراحی نشده است ولی با توجه به قابلیت هایش به خوبی با شرایط R تطبیق پیدا کرده و در میان برنامه نویس ها پذیرفته شده است. این ساختار در آینده مورد بررسی قرار می گیرد.

کار با لیست ها لیست ها به دلیل توابع متعددی که برای کار با آن ها تعریف شده است، می تواند تا حدودی ساده تر و با مقدار کدنویسی کمتری انجام شود. با این حال، مساله اصلی در این زمینه این است که بسیاری از توابع و پکیج ها به گونه ای طراحی شده اند که داده های ورودی را در قالب دیتافریم، بردار و ماتریس دریافت کنند.

فاکتور ها هم آنگونه که بررسی شد، مشخصا برای طبقه بندی داده ها در گروه های محدود و مشخص و ذخیره آن ها در قالب چندین سطح (level) استفاده می شوند. این ویژگی در بحث تحلیل داده ها و بازنمایی بصری آن ها، بسیار کاربردی و ارزشمند خواهد بود.