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

فاکتورها : بخش دوم

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

بررسی طول دیتافریم و دسترسی به عناصر آن

همانند سایر ساختمان داده ها، برای بررسی طول فاکتورها هم از تابع ()length استفاده می شود. همچنین، برای دسترسی به هر یک از عناصر یک فاکتور هم از همان شیوه استاندارد و مرسوم [] استفاده می شود. در ادامه نتیجه اعمال این دو روش را بر روی فاکتور تولید شده در بخش قبل، بررسی می کنیم.

length(color_factor) 
# [1] 9 
color_factor [6] 
# [1] yellow 
# Levels: black blue green red white yellow

تغییر عناصر فاکتور

برای تغییر دادن عناصر فاکتور هم با استفاده از اندیس ها می توان به شیوه زیر عمل کرد.

color_factor [6] <- "red" 
color_factor 
# [1] red blue green green red red white black green 
# Levels: black blue green red white yellow 

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

color_factor [6] <- "purple"

# Warning message: 
# In `[<-.factor`(`*tmp*`, 6, value = "purple") : 
# invalid factor level, NA generated

حذف کردن عناصر از فاکتور هم مشابه دیتافریم ها و سایر ساختمان داده ها با استفاده از اندیس منفی انجام می شود.

مشخص کردن سطوح

اگرچه R با توجه به داده های ذخیره شده در فاکتور، سطوح (Levels) را شناسایی و مدیریت می کند ولی این امکان هم وجود دارد که بتوان در زمان ایجاد فاکتور، سطوح مورد نظر را به صورت صریح مشخص کرد.

tv_schedule <- factor(c("tennis", "football", "volleyball", "ad", "football", "ad", "tennis"),
 levels = c("tennis", "football", "volleyball", "ad"))

به منظور نمایش ساختمندانه تر خروجی ها می توان از تابع table هم استفاده کرد. (البته این تابع اختصاص به فاکتورها ندارد و در سایر موارد مشابه نیز کاربرد دارد.)

table(tv_schedule) 
# tv_schedule 
# tennis football volleyball ad  
#      2        2      1      2

همانطور که مشاهده می شود، تابع table این امکان اضافی را هم فراهم کرده که تعداد نمونه های استفاده شده از هر level را در اختیار داشت.

تغییر عناوین سطوح

بنابر هر دلیلی از جمله وقوع تغییرات در برنامه و یا کاربرد آن، می توان عناوین level ها را به سادگی با استفاده از ویژگی label تابع factor تغییر داد. به عنوان یک نکته کنکوری (!) همواره توجه داشته باشید که تهیه پشتیبان از داده هایی که قصد تغییر آن ها را دارید می تواند بسیار راهگشا بوده و زمان زیادی را برای شما ذخیره کند.

sport_tv <- factor(tv_schedule, labels = c("Te", "Fb", "Vb", "Ad")) 
sport_tv 
# [1] Te Fb Vb Ad Fb Ad Te 
# Levels: Te Fb Vb Ad