وی

ویژگی names در R

1 تمرین

درباره‌ی ویژگی names

عناصر یک بردار می‌توانند اسم داشته باشند، که گاهی کار کردن با آن‌ها را راحت‌تر می‌کند.

ساخت

سه روش برای افزودن اسم به یک بردار وجود دارد.

۱) هنگام ساخت بردار

> work_days <- c(Mon = TRUE, Tue = TRUE, Wed = TRUE, Thu = TRUE, Fri = TRUE, Sat = FALSE, Sun = FALSE)
> work_days
  Mon   Tue   Wed   Thu   Fri   Sat   Sun 
 TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE 

۲) با اختصاص دادن یک بردار کاراکتری به names()

> months <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
> names(months) <- month.abb
> months
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
 31  28  31  30  31  30  31  31  30  31  30  31 

۳) با setNames()

> months <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
> setNames(months, month.name)
  January  February     March     April       May      June      July    August September   October  November  December 
       31        28        31        30        31        30        31        31        30        31        30        31 

حذف

اگر دیگر به اسم‌ها نیازی نیست، می‌توان آن‌ها را با مقدار دادن NULL حذف کرد.

> work_days
  Mon   Tue   Wed   Thu   Fri   Sat   Sun 
 TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE 
> names(work_days) <- NULL
> work_days
[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE

تابع unname() همین کار را انجام می‌دهد و شاید منظورتان را روشن‌تر بیان کند.

کار با اسم‌ها

تابع names() هم می‌تواند اسم‌ها را بازیابی کند و هم آن‌ها را تعیین کند.

> names(months) <- month.abb
> names(months)[1:3]
[1] "Jan" "Feb" "Mar"

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

> months[c("Jul", "Aug")]
Jul Aug 
 31  31 

برای اینکه چنین اندیس‌گذاری‌ای درست کار کند، بهتر است مطمئن شوید که اسم‌ها یکتا و بدون مقدار گمشده باشند. با این حال، R یکتا بودن را الزام نمی‌کند.

عملیات معمول بردارها همچنان کار می‌کنند و اگر منطقی باشد، اسم‌ها معمولاً حفظ می‌شوند.

> months[months == 30]
Apr Jun Sep Nov 
 30  30  30  30 

> sum(months)
[1] 365  # no meaningful names possible

مباحث پیشرفته‌تر

بسیاری از اشیاء R، از جمله vectors، می‌توانند ویژگی‌های دلخواه داشته باشند. ویژگی names تنها یک نمونه است، هرچند نمونه‌ای به‌ویژه رایج و مهم.

در عمل، اسم‌ها گاهی برای بردارها مفیدند اما به‌ندرت ضروری‌اند. ویژگی names-attribute برای ساختارهای پیچیده‌تری مانند lists و dataframes بسیار مهم‌تر می‌شود، چنان‌که در مفاهیم بعدی خواهیم دید.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

ویژگی names را یاد بگیرید