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

بردارها : بخش نخست

در ادامه بررسی دستورهای اولیه در زبان R، در این بخش کمی بیشتر درباره بردارها و جنبه های مختلف آن ها صحبت می کنیم. بردارها از اجزا اصلی و مرکزی R هستند که می توانند شامل اعداد، رشته ها یا مقادیر منطقی باشند، اما نمی توان برداری ترکیبی از مقادیر مختلف ایجاد کرد. برای یادآوری مخاطبانی که با زبان C آشنایی دارند، ساختار و عملکرد بردار در R همانند آرایه در زبان C است با این تفاوت که اندیس بردارها برخلاف آرایه ها در C از 1 (یک) شروع می شود. این مساله زمانی که قصد داشته باشیم به هر یک از عناصر یک بردار دسترسی پیدا کنیم، حائز اهمیت می شود.

R-academy-vectors-in-r

انواع بردار در R

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

همانگونه که از نام آن ها مشخص است، بردارهای عددی و کاراکتری تنها شامل آن نوع داده ای می باشند.

vec_1 <- c(1, 2, 16, 29)

vec_1

# [1] 1 2 16 29

vec_2 <- c("I", "am", "learning", "R")

vec_2

# [1] "I" "am" "learning" "R"

ولی بردارهای منطقی تنها می توانند شامل مقادیر بولین TRUE و FALSE و همچین NA برای مقادیر Null باشند.

vec_3 <- c(FALSE, NA, TRUE, NA)

vec_3

# FALSE NA TRUE NA

عملیات بر روی بردارها

به عنوان نخستین عملیات برای کار با بردارها، می توان به شناسایی نوع داده ای که بردار در خود ذخیره کرده است، اشاره کرد. به عنوان مثال، برای بردارهایی که پیشتر ایجاد کردیم، می توان به صورت زیر نوع داده های آن ها را مشخص کرد.

typeof(vec_1)
# [1] "double"

typeof(vec_2)
# [1] "character"

typeof(vec_3)
# [1] "logical"

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

vec_4 <- c(123, "r-acacemy", "programming", TRUE, 14.2)
vec_4
# [1] "123" "r-acacemy" "programming" "TRUE" "14.2"

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

vec_5 <- c(FALSE, 90, TRUE, 140)
vec_5
# [1] 0 90 1 140

در زمان تبدیل داده های منطقی به داده های عددی در یک بردار، همانطور که می دانید، TRUE معادل مقدار 1 و FALSE معادل مقدار صفر در نظر گرفته می شود.

برای ایجاد بردار، اگر ورودی های تابع ()c خودشان بردار باشند، R آنها را مسطح می کند و در یک بردار واحد ترکیب می کند.

vec_6 <- c (1, 2, 3)
vec_7 <- c (40, 50, 60)
vec_8 <- c (vec_6, vec_7)
vec_8
# [1] 1 2 3 40 50 60

در مواردی نیاز می شود که خروجی بردارها را به شیوه ای کاربرپسندانه تر نمایش دهیم. برای انجام این کار استفاده از تابع()cat می تواند مفید واقع بشود.

cat(vec_8, "is a vector of vectors ", "\n")

در مثال بالا، بهترین راه برای اینکه با کاربرد دستور خط جدید (new line) یا n\ آشنا شوید این است که مثال را یکبار بدون این دستور اجرا کنید!!!

ایجاد بردار با مقادیر متوالی

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

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

vec_9 <- 6:18
vec_9
# [1] 6 7 8 9 10 11 12 13 14 15 16 17 18

بردارهای عددی پیوسته (یعنی مقادیر به صورت یک واحد یک واحد افزایش پیدا می کنند) را می توان با مقادیر اعشاری هم تولید کرد:

vec_10 <- 3.8:10.8
vec_10
# [1] 3.8 4.8 5.8 6.8 7.8 8.8 9.8 10.8

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

vec_11 <- 3.8:10.5
vec_11
# [1] 3.8 4.8 5.8 6.8 7.8 8.8 9.8

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