آموزش زبان برنامه نویسی R- قسمت چهارم

آموزش زبان برنامه نویسی R- قسمت چهارم

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


 اگر دیتاست بزرگ باشد دستور print گزینه مناسبی برای نمایش محتویات دیتا فریم نیست. و به جای آن می‌توان از head استفاده کرد. این دستور تنها چند خط اول دیتاست را چاپ می‌کند.

نوشتن فایل
برای نوشتن نتایج و مقادیر ساختمان داده‌ها می‌توان از دستور write.table و write.csv  استفاده کرد.

write.table(x = women, file = "women.txt", quote = F, row.names = F )

پارامتر x  یک دیتا فریم می‌گیرد و پارامتر file نام فایل را می‌گیرد. quote=F به این معنی است که برای نوشتن از quotation استفاده نشود. row.names =F  نام ردیف‌ها را در صورت وجود در فایل نمی‌نویسد.
اگر به جای write.table از write.csv استفاده کنید بین ستون‌ها از کاما استفاده می‌شود. در‌واقع write.csv نمونه‌ای خاص از write.table است.

ساختمان داده‌ها در R
زبان R به دلیل استفاده‌ای که دارد ساختمان داده‌ای به صورت زیر دارد.

  همگن ناهمگن
یک بعدی وکتور لیست
دو بعدی ماتریس دیتا فریم
چند بعدی آرایه  
 

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

غیرهمگن
غیر همگن بودن ساختار به این معنی است که مقادیر از نوع مختلفی می‌توانند در این ساختار قرار گیرند. برای مثال یک ستون از نوع عدد طبیعی ستونی دیگر از نوع رشته و ستونی دیگر از نوع منطقی باشد.

وکتور (vector)
این ساختار از نوع همگن و یک بعدی  است و مجموعه مقادیری که در آن قرار می‌گیرند همه باید از یک نوع باشند. این ساختار توسط دستور c (مخفف combine یا ترکیب) ساخته می‌شود.

v <- c(1,5,301)
v2 <- c(TRUE,FALSE,T,F)
v3 <- c(12L,877L,2L)

به سه وکتور بالا توجه کنید. وکتور اول که توسط دستور c و اعداد تشکیل شده‌اند همگی از نوع numeric (شبیه double) در نظر گرفته می‌شوند. پس وکتور اول وکتوری از نوع عددی است. وکتور دوم همه مقادیر از نوع منطقی هستند پس وکتور دوم از نوع منطقی است. وکتور سوم شبیه وکتور اول است با این تفاوت که اعداد پسوند L دارند، این پسوند تعیین می‌کند که عدد حتماً طبیعی است پس وکتور سوم از نوع عدد طبیعی (int) است.
توجه: مقادیر منطقی TRUE و T همچنین مقادیر منطقی FALSE و F یکسان هستند و می‌توانند به جای یکدیگر استفاده شوند و به بزرگی حروف آن‌ها دقت کنید.
تذکر: اگر در دستور c از مقادیری با نوع‌های مختلف استفاده کنید آن‌ها را به صورت خودکار تبدیل می‌کند. برای مثال اگر یک مقدار از نوع عدد طبیعی دیگری از نوع رشته و دیگری از نوع منطقی در دستور c استفاده شود همگی تبدیل به نوع رشته می‌شوند و وکتور از نوع رشته را تشکیل می‌دهند.

لیست (list)
این ساختار از نوع ناهمگن و یک بعدی است. برای مواقعی استفاده می‌شود که می‌خواهیم درایه‌هایی از انواع مختلف در یک مجموعه قرار دهیم. این ساختار توسط دستور list ساخته می‌شود.

l1 <- list(1L, "hi", 6.7, FALSE)
l2 <- list(list(1,2), "NO")

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

ماتریس (matrix)
ماتریس ساختمان داده‌ای دوبعدی و همگن است. تمامی درایه‌های آن از یک نوع هستند. برای ساختن آن می‌توان از دستور matrix استفاده کرد.

m1 <- matrix(1:12,nrow = 3,ncol = 4)

توسط دستور فوق ماتریسی عددی با ابعاد ۳ و ۴ ساخته می‌شود.
۱:۱۲ این عبارت به این معنی است که یک مجموعه سری اعداد با اختلاف یک ساخته شود و با دستور

c(1,2,3,4,5,6,7,8,9,10,11,12)

تفاوتی ندارد و تنها ساده نویسی شده است.
nrow تعداد ردیف ماتریس را مشخص می‌کند و ncol تعداد ستون ماتریس را مشخص می‌کند.

آرایه (array):
آرایه‌ها شباهت زیادی به ماتریس‌ها دارند با این تفاوت که ماتریس‌ها دو بعدی هستند ولی آرایه می‌تواند ابعاد بیش‌تر از دو نیز داشته باشد. آرایه‌ها نیز همگن هستند. برای ساختن آرایه از دستور array استفاده می‌شود.

a1 <- array(1:12, c(2, 3, 2))

توسط دستور بالا آرایه‌ای با سه بعد ایجاد می‌شود.

دیتا فریم (data.frame)
دیتا فریم ساختمان داده‌ای ناهمگن است و دوبعدی. به دلیل ناهمگن بودن آن دیتاست‌هایی که توسط read.table یا read.csv و … از فایل خوانده می‌شوند به صورت پیش‌فرض در ساختمان داده دیتا فریم ریخته می‌شوند. اما با دستور زیر نیز می‌توان دیتا فریم را ساخت.

df <- data.frame(x = 1:3, y = c("a", "b", "c"), stringsAsFactors = FALSE)

برای ایجاد دیتا فریم از دستور data.frame استفاده می‌شود و در ایجاد آن باید اسم هر ستون تعیین شود. در اینجا x و y اسامی ستون‌های اول و دوم هستند. هر ستون حاوی وکتور است. البته ستون می‌تواند به جای وکتور حاوی لیست نیز باشد که به صورت زیر تعریف می‌شود.

df$z <-list(1:2, "l", T)

نکته قابل توجه این است که برای دسترسی به هر ستون از دیتا فریم می‌توان از اسمی که برای آن ستون در نظر گرفته شده است استفاده شود به این صورت که اول اسم دیتا فریم (اینجا df) و علامت $ را قرار داده سپس نام ستون می‌آید (اینجا z). در صورتی که ستونی با این اسم وجود نداشته باشد و ما از انتساب استفاده کرده باشیم ابتدا ستونی جدید با آن نام ساخته می‌شود و بعد مقادیر به آن منتسب می‌شوند.
برای توضیح stringAsFactor = FALSE ابتدا اجازه دهید فاکتور را توضیح دهیم.

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

x <- factor(c("a", "b", "b", "a"))

با توجه به دستور بالا فکتوری ایجاد می‌شود که فقط مقادیر a و b می‌تواند داشته باشد.
stringAsFactor = FALSE  در دیتا فریم به صورت پیش‌فرض وکتور‌هایی از نوع رشته به صورت فاکتور در نظر گرفته می‌شوند اما اگر می‌خواهید خود رشته در نظر گرفته شود از عبارت ذکر شده استفاده کنید.

names
همانند دیتا فریم بر روی ستون‌های ساختمان داده‌های دیگر همچون وکتور نیز می‌توانید اسم بگذارید. این کار توسط دستور names  قابل انجام است.

v4 <- c(1, 2, 3)
names(v4) <- c("a", "b", "c")

این نام‌گذاری برای نمایش بهتر در خروجی استفاده می‌شود.

print(v4)
a b c
1 2 3

دستورات مفید
برای مشاهده جدولی محتوای ساختمان داده‌ها از دستور View استفاده کنید.

View(df)

برای مشاهده تعداد ستون ساختمان داده‌ها از دستور ncol و برای تعداد ردیف از nrow و برای مشاهده ابعاد از dim استفاده کنید.

nrow(m1)
ncol(df)
dim(a1)

برای مشاهده مقادیر موجود در ساختمان داده‌ها از دستور str استفاده کنید.

str(df)

برای ترکیب چند دیتا فریم می‌توانید از دو دستور cbind و rbind استفاده کنید.

df1 <- cbind(df, data.frame(m = 3:1))

این دستور ترکیب را بر روی ستون انجام می‌دهد.

df2 <- rbind(df, data.frame(x = 10, y = "d", z = F


دستور بالا ترکیب را بر روی ردیف انجام می‌دهد. نکته مهم این است برای ترکیب روی ردیف باید تعداد ستون‌های دو دیتا فریم برابر باشند.

 
امین  خزاعی

امین خزاعی

امین، برنامه نویس سیستمی و امنیت و ساکن شیراز. عاشق گنو/ لینوکس و نرم افزار آزاد. امین اعتقاد دارد همیشه باید برای توسعه نرم افزارهای آزاد و گسترش فرهنگ آزادی در نرم افزار وقت گذاشت.


1 نظر درباره‌ی این پست نوشته شده است.

بهزاد خزائی

پنج‌شنبه, 31 خرداد 1397

با سلام
شما به صورت خصوصی هم تدریس می کنین؟

پاسخ

ثبت نظر