آموزش وکتور در R به زبان ساده (با مثال و نکات کاربردی)

وکتورها اساسی ترین اشیاء داده در R هستند و شش نوع بردار وجود دارد که عبارتند از: منطقی، عدد صحیح ، مضاعف، مختلط، کاراکتر و خام.
در واقع بردارها (Vectors) در زبان R، پایهایترین و مهمترین بلوک سازنده دادهها هستند. در واقع، تمام ساختارهای پیچیدهتر در R (مثل ماتریسها و دیتافریمها) از کنار هم قرار گرفتن همین بردارها ساخته میشوند.
برای درک بهتر، یک بردار را شبیه به یک صف یکطرفه و تکبعدی از اطلاعات تصور کنید.
قانون طلایی بردارها: یکدستی کامل
مهمترین قانونی که درباره بردارها باید بدانید این است که تمام اعضای یک بردار باید دقیقاً از یک جنس باشند. شما نمیتوانید در یک صف، هم عدد داشته باشید و هم متن. اگر سعی کنید یک کلمه متنی را در یک صف عددی وارد کنید، زبان R به صورت خودکار تمام اعداد آن صف را هم تبدیل به متن میکند تا قانون «یکدستی» حفظ شود.
انواع رایج بردارها
بردارها معمولاً در سه قالب اصلی استفاده میشوند:
-
عددی (Numeric): صفی از اعداد (صحیح یا اعشاری).
-
متنی (Character): صفی از کلمات یا حروف.
-
منطقی (Logical): صفی از مقادیر درست/غلط (True/False) که برای بررسی شرایط استفاده میشود.
کاربرد بردارها در تحلیل دادههای مالی
در طراحی سیستمهای فناوری بانکی و تحلیل دادههای مالی، بردارها شبیه به یک ستون مستقل در پایگاه داده شما عمل میکنند.
-
صف عددی: تصور کنید میخواهید مبالغ تمام تراکنشهای روزانه یک درگاه پرداخت را ذخیره کنید. این صف طولانی از اعداد، یک بردار عددی است.
-
صف متنی: لیستی از نام شعب بانک یا وضعیت تراکنشها (مثل "موفق"، "ناموفق"، "در انتظار") یک بردار متنی را تشکیل میدهند.
-
صف منطقی: نتیجه بررسی اینکه آیا موجودی حسابهای مختلف بالای خط فقر تعیینشده هست یا خیر، یک بردار از پاسخهای True و False خواهد بود.
چرا بردارها در R قدرتمند هستند؟ (خاصیت Vectorized)
بزرگترین مزیت بردارها در R این است که میتوانید محاسبات ریاضی را به صورت همزمان روی کل صف انجام دهید. مثلاً اگر یک صف دههزارتایی از مبالغ تراکنشها داشته باشید و بخواهید از هر کدام ۹ درصد مالیات کسر کنید، نیازی نیست به سیستم بگویید «یکی یکی برو جلو و محاسبه کن». فقط با یک دستور ساده، سیستم آن مالیات را در کسری از ثانیه روی تمام ده هزار عددِ آن بردار اعمال میکند. این ویژگی، سرعت پردازش دادههای حجیم را به شدت بالا میبرد.
ایجاد بردار
بردارهای تک عضوی
حتی زمانی که شما فقط یک مقدار در R می نویسید؛ آن مقدار درواقع برداری است که طول ۱ دارد و به یکی از انواع بردارهای بالا تعلق دارد:
# Atomic vector of type character.
print(“abc”);
# Atomic vector of type double.
print(12.5)
# Atomic vector of type integer.
print(63L)
# Atomic vector of type logical.
print(TRUE)
# Atomic vector of type complex.
print(2+3i)
# Atomic vector of type raw.
print(charToRaw(‘hello’))
زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر حاصل می شود:
[۱] “abc”
[۱] ۱۲٫۵
[۱] ۶۳
[۱] TRUE
[۱] ۲+۳i
[۱] ۶۸ ۶۵ ۶c 6c 6f
بردارهای چند عضوی
با استفاده از عملگر دو نقطه با داده های عددی؛ ایجاد می شوند:
# Creating a sequence from 5 to 13.
v <- 5:13
print(v)
# Creating a sequence from 6.6 to 12.6.
v <- 6.6:12.6
print(v)
# If the final element specified does not belong to the sequence then it is discarded.
v <- 3.8:11.4
print(v)
زمانی که کد بالا را اجرا می کنیم؛ نتایج زیر به دست می آید:
[۱] ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳
[۱] ۶٫۶ ۷٫۶ ۸٫۶ ۹٫۶ ۱۰٫۶ ۱۱٫۶ ۱۲٫۶
[۱] ۳٫۸ ۴٫۸ ۵٫۸ ۶٫۸ ۷٫۸ ۸٫۸ ۹٫۸ ۱۰٫۸
استفاده از عملگر (.Seq)
# Create vector with elements from 5 to 9 incrementing by 0.4.
print(seq(5, 9, by = 0.4))
زمانی که کد بالا را اجرا می کنیم؛ نتایج زیر به دست می آید:
[۱] ۵٫۰ ۵٫۴ ۵٫۸ ۶٫۲ ۶٫۶ ۷٫۰ ۷٫۴ ۷٫۸ ۸٫۲ ۸٫۶ ۹٫۰
استفاده از تابع ()c
اگر یکی از عناصر، کاراکتر باشد؛ مقادیر غیر کاراکتری به نوعی کاراکتر تخصیص داده می شود.
# The logical and numeric values are converted to characters.
s <- c(‘apple’,’red’,5,TRUE)
print(s)
زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر حاصل می شود:
[۱] “apple” “red” “5” “TRUE”
دسترسی به عناصر بردار
عناصر بردار با استفاده از شاخص گذاری در دسترس قرار می گیرند. براکت ها [ ] برای شاخص گذاری و فهرست سازی استفاده می شود. شاخص گذاری با موقعیت ۱ آغاز می شود. دادن یک مقدار منفی در این شاخص، باعث می شود که این عنصر از نتیجه حذف شود. TREU، FASE یا ۰ و ۱ را نیز می توان برای شاخص گذاری استفاده کرد.
# Accessing vector elements using position.
t <- c(“Sun”,”Mon”,”Tue”,”Wed”,”Thurs”,”Fri”,”Sat”)
u <- t[c(2,3,6)]
print(u)
# Accessing vector elements using logical indexing.
v <- t[c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)]
print(v)
# Accessing vector elements using negative indexing.
x <- t[c(-2,-5)]
print(x)
# Accessing vector elements using 0/1 indexing.
y <- t[c(0,0,0,0,0,0,1)]
print(y)
زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر حاصل می شود:
[۱] “Mon” “Tue” “Fri”
[۱] “Sun” “Fri”
[۱] “Sun” “Tue” “Wed” “Fri” “Sat”
[۱] “Sun”
به کار گیری بردار
دو بردار با طول یکسان را می توان با هم جمع بست، از هم کم کرد؛ در هم ضرب یا بر هم تقسیم نمود و حاصل را به صورت یک بردار در خروجی ایجاد کرد.
# Create two vectors.
v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11,0,8,1,2)
# Vector addition.
add.result <- v1+v2
print(add.result)
# Vector subtraction.
sub.result <- v1-v2
print(sub.result)
# Vector multiplication.
multi.result <- v1*v2
print(multi.result)
# Vector division.
divi.result <- v1/v2
print(divi.result)
زمانی که کد بالا را اجرا می کنیم؛ نتایج زیر ایجاد می شود:
[۱] ۷ ۱۹ ۴ ۱۳ ۱ ۱۳
[۱] -۱ -۳ ۴ -۳ -۱ ۹
[۱] ۱۲ ۸۸ ۰ ۴۰ ۰ ۲۲
[۱] ۰٫۷۵۰۰۰۰۰ ۰٫۷۲۷۲۷۲۷ Inf 0.6250000 0.0000000 5.5000000
بازیافت عناصر برداری
اگر عملیات حسابی را روی دو بردار با طول نابرابر اعمال کنیم؛ سپس عناصر بردار کوتاه تر برای تکمیل کردن عملیات؛ بازیافت می شوند.
v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11)
# V2 becomes c(4,11,4,11,4,11)
add.result <- v1+v2
print(add.result)
sub.result <- v1-v2
print(sub.result)
زمانی که کد بالا را اجرا می کنیم؛ نتایج زیر ایجاد می شود:
[۱] ۷ ۱۹ ۸ ۱۶ ۴ ۲۲
[۱] -۱ -۳ ۰ -۶ -۴ ۰
مرتب سازی اعضای یک بردار
اعضای درون یک بردار را می توان با استفاده از تابع ()sort مرتب سازی کرد.
v <- c(3,8,4,5,0,11, -9, 304)
# Sort the elements of the vector.
sort.result <- sort(v)
print(sort.result)
# Sort the elements in the reverse order.
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)
# Sorting character vectors.
v <- c(“Red”,”Blue”,”yellow”,”violet”)
sort.result <- sort(v)
print(sort.result)
# Sorting character vectors in reverse order.
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)
زمانی که کد بالا را اجرا می کنیم؛ نتیجه زیر به دست می آید:
[۱] -۹ ۰ ۳ ۴ ۵ ۸ ۱۱ ۳۰۴
[۱] ۳۰۴ ۱۱ ۸ ۵ ۴ ۳ ۰ -۹
[۱] “Blue” “Red” “violet” “yellow”
[۱] “yellow” “violet” “Red” “Blue”
