راهنمای R-(گرداآوری توسط خانم فرزانه باقری)-4
احتراما به استحضار می رساند که خانم سارا باقری (فارغ التحصیل دانشگاه پیام نور اصفهان)، در مقطع کارشناسی خود پایان نامه ای را با موضوع (بررسي نرم افزار R) به اتمام رسانده اند که از آن می توان به عنوان یکی از بهترین منابع موجود فارسی برای آموزش R (و البته تنها منبع کامل ) نام برد. باعث مباهات اینجانب می باشد که با اجازه ایشان بتوانم در محیط آماری کوچک خود، کار بزرگ ابشان را درج نمایم. از دوستان و آماری های عزیز که در آینده از این مطالب استفاده می کنند خواهشمندیم از قید نام گرداورنده مطلب دریغ ننمایند.
2.2 Objectها،جنس و خصوصيات آنها
2.2.1 خصوصيات اصلي؛ جنس و تعداد اعضاي يك object
همه چيز که در R شامل توابع و ساختمان داده ها بعنوان objects موجود مي باشند می توانند همگي بر داده ها اعمال شوند. براي مثال بردارهاي عددي يا مقادير مختلط،بردارهاي با مقادير منطقي يا بردارهاي با مقادير رشته هاي كاراكتري كه اينها بعنوان ساختار"atomic" شناخته شده اند چرا كه اجزائ آنها همگي داراي نوع (type)يكساني مي باشند يا بعبارتي mode آنها(جنس آنها)بترتيب عددي،مختلط،منطقي و كاراكتري مي باشند.
بردارها بايد همه ي مقاديرشان جنس يكساني داشته باشند. بنابراين هر بردار مشخص بايد منطقي،عددي،مختلط يا كاراكتري باشد. تنها يك مورد استثنا است كه مقدار ويژه ي ليست شده بعنوان NA براي كميت هايي كه قابل دسترسي نيستند نقش دارد. توجه كنيد كه يك بردار مي تواند تهي باشد اما هنوز mode داشته باشد. براي مثال بردار رشته ي كاراكتري تهي ليست شده بعنوان(character(0 و بردار عددي تهي بعنوان(numeric(0.
R همچنين روي object هايي كه ليست(list) ناميده مي شوند عمل مي كند؛ آنهايي كه از جنس ليست مي باشند. دنباله هاي مرتب شده از object ها مي توانند از هر جنسي باشند. ليست ها بعنوان ساختار"recursive" شناخته شده اند تا ساختار"atomic". از آنجا كه اجزائ آن مي توانند ليست هايي در سمت راستشان باشند.
ساختارهاي"recursive" ديگر آنهايي هستند كه از جنس هاي function و expression مي باشند.
بوسيله ي جنس يك object به تايپ اصلي از بخش هاي اساسي آن پي مي بريم. اين يك مورد خاص از مشخصه ي يك object مي باشد. خصوصيات ديگرobject، تعداد اعضاي آن مي باشد. تابع هاي
(mode(object و(length(object مي توانند براي پيدا كردن جنس و تعداد اعضاي هر ساختار تعريف شده بكار روند. بيشتر خصوصيات يك object توسط(attributes(object تهيه مي شود. براي مثال اگر z يك بردار مختلط با طول 100 باشد، آنگاه مقدار (mode(z رشته ي كاراكتري "complex" و(length(z مقدار 100 مي باشد.
R همچنين مي تواند جنس يك object را تغيير دهد. براي مثال:
> z <- 0:9
مي توانيم قرار دهيم:
> digits<- as.charactor(z)
كه digits بردار كاراكتري("C("0","1","2",…"9مي باشد.
بيشتر تغييرات mode براي بازسازي بردارهاي عددي مي باشد.
> d <- as.integer(digits)
حالا d وz مشابه اند. مجموعه ي بزرگي از تابع ها بصورت( )as.something براي تغيير دادن mode بكار مي روند.
2.2.2 تغيير تعداد اعضاي يك object
يك object تهي ممكن است هنوز داراي يك mode باشد. براي مثال:
> e <- numeric( )
بردار تهي به نام e مي سازد كه از جنس عددي مي باشد. اگر يك عضو خارج از برد قبلي به object داده شود اندازه ي object تغيير مي كند. براي مثال:
> e[3] <- 17
برداري به نام e مي باشد كه تعداد اعضاي آن 3 مي باشد.(دو عضو اول آن هردو NA مي باشند.)
اجزايي كه به نام object ها اضافه مي شوند بايد جنس آنها با جنس object يكسان باشند. بر عكس، براي حذف قسمتي از يك object تنها توسط يك انتساب صورت مي گيرد. اگر alpha يك object با اندازه ي 10 باشد:
> alpha <- alpha[2*1:5]
يك object با اندازه ي 5 مي باشد، كه اعضاي آن، اعضاي 2،4،6،8،10 از object قبلي مي باشند.
2.2.3 بدست آوردن و معين كردن مشخصات يك object
تابع(attributes(object يك ليست از همه ي مشخصات تعريف شده براي آن object مي دهد. تابع attr(object,name) مي تواند براي انتخاب يك مشخصه ي بخصوصي استفاده شود. اين تابع بندرت استفاده مي شود، بجز در شرايط خاصي كه تعدادي مشخصه ي جديد براي تعدادي هدف هاي بخصوص بوجود آورده مي شود.
براي مثال وابسته شدن يك روز يا يك عملگر با يك object.
در انتساب و حذف كردن مشخصات دقت كنيد چرا كه آنها يك قسمت داخلي از سيستم object كه در R استفاده مي شود،مي باشند. هنگامي كه در قسمت چپ از يك انتساب استفاده شود يا يك مشخصه جديد را با object به هم وابسته مي سازد يا يك موجودي را تغيير مي دهد. براي مثال:
> attr(z,"dim") <- c (10 ,10)
R اجازه مي دهد تا با z بعنوان يك ماتريس 10در 10 رفتار شود.
2.2.4 كلاس يك object
يك مشخصه بخصوص شناخته شده بعنوان كلاس يك Object، براي يك سبك سازگار شده از برنامه در R استفاده مي شود.
براي مثال اگر يك object كلاس "data.frame" را داشته باشد، به روش خاصي چاپ مي شود؛ تابع
( ) plot نمودار را به روش خاصي نشان مي دهد. براي خارج كردن اثر كلاس از تابع( ) unclass استفاده مي شود. براي مثال اگر winter از كلاس"data.frame" باشد:
> winter
فرم data frame (مجموعه داده) را چاپ مي كند كه شبيه يك ماتريس مي باشد و اگر دستور زير را اجرا كنيم:
> unclass(winter)
بعنوان يك ليست ترتيبي چاپ مي شود.
2.3 آرايه ها
يك آرايه مي تواند بعنوان يك مجموعه مشترك از ورود چند داده بررسي شود. R امكانات ساده اي براي ساختن آرايه ها و حالت های خاصی از ماتريس ها دارد.
با يك بردار بعد آرایه مشخص می شود كه شامل اعداد صحيح مثبت مي باشد. اگر تعداد اعضاي این بردار k باشد مي گوييم آرايه،k-بعدي است. ماتريس يك آرايه 2-بعدي است. براي مثال فرض كنيد z برداري شامل 1500 عدد است در اينصورت:
> dim(z) <- c(3,5,100)
100تا ماتريس 3در5 مي دهد.
هر ماتريس يك آرايه است كه شامل سطر و ستون مي باشد. براي ساختن ماتريس و آرايه تابع هاي ديگري نيز مانند( ) array( )، matrix بكار مي روند. فرم كلي ساختن يك ماتريس بصورت زير مي باشد:
> matrix(vector-name , nrow=value , ncol=value , byrow=T(or F))
كه nrow و ncol بترتيب تعداد سطر و تعداد ستون يك ماتريس را مشخص مي كنند. Byrow=T باعث مي شود كه اعضاي بردار مورد نظر بصورت سطري در ماتريس قرار بگيرند.
براي ساختن آرايه مي توان از دستور زير نيز استفاده كرد:
> array(vector-name , dimention-vector)
براي مثال فوق داريم:
> array(z,c(3,5,100))
برای مثال اگر بردار بُعد آرايه ای مثل a و برابر(c(3,4,2 باشد آنگاه 24=2*4*3 داده در آرايه ي a وجود دارد كه شامل دو ماتريس 4*3مي باشد و بردار داده بترتيب از سمت چپ به راست بصورت زير در آنها قرار مي گيرد(در هر یک از ماتریس ها داده ها به صورت ستونی پر می شوند):
a[1,1,1] , a[2,1,1] , … , a[2,4,2] , a[3,4,2].
2.3.1 جداكردن قسمتي از يك آرايه
اعضاي يك آرايه به وسيله ي نام آرايه و subscriptها در داخل براكت ها با جداكردن توسط علامت کاما(",") قابل دسترسي اند. بطور كلي، زير مجموعه اي از يك آرايه توسط دادن يك دنباله از بردارهاي شاخص
(index vector) در مكان subscript ها كه در داخل براكتها مي باشند مشخص مي شوند؛ اگر در هر موقعيت شاخص يك بردار شاخص تهي داده شود، آنگاه برد كامل آن subscript داده مي شود در ادامه مثال قبلي [,,2]a يك آرايه ي2*4 با بردار بعد(c(4,2و بردار داده كه شامل مقادير زير:
C(a[2,1,1] , a[2,2,1] , a[2,3,1] , a[2,4,1], a[2,1,2] , a[2,2,2] , a[2,3,2] , a[2,4,2])
مي باشند، در آن ترتيب مي باشد. در حقيقت سطر دوم از ماتريس اول را بعنوان ستون اول[,,2]a و سطر دوم ماتريس دوم را بعنوان ستون دوم [,,2]a در نظر مي گيرد.
نکات:
-
[,,]aنشان دهنده ي آرايه اصلي مي باشد.
-
بردار بعدهر آرايه مانند z، توسط دستور(dim(zداده مي شود.
2.3.2 آرايه هاي شاخص
همانند يك بردار شاخص در هر موقعيت subscript، يك آرايه ممكن است با يك آرايه ي شاخص در انتساب يك بردار از كميت ها به مجموعه اي نامرتب از اعضا در آرايه يا خارج كردن يك مجموعه اي نامرتب بعنوان يك بردار استفاده شود. در مورد يك آرايه ي مشخصه ي دوتايي، يك ماتريس شاخص ممكن است شامل دو ستون و تعداد زيادي سطر داده شود. اعضاي ماتريس شاخص، سطر و ستون و مشخصه هايي براي آرايه ي مشخصه ي دوتايي هستند. براي مثال فرض كنيد ما يك آرايه 4در 5به نام x داريم و مي خواهيم:
-
عناصر[x[3,1]، x[2,2]،x[1,3 را خارج كنيم،
-
بجاي اين اعداد خارج شده عدد صفر قرار دهيم.
براي اين كار ما به يك آرايه ي 3در2 احتياج داريم كه روش كار در مثال زير ديده مي شود:
> x <- array(1:20, dim=c(4,5)) ≠Generate a 4 by 5 array
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[,2] 2 6 10 14 18
[,3] 3 7 11 15 19
[,4] 4 8 12 16 20
> i <- array(c(1:3,3:1), dim=c(3,2))
> i ≠i is a 3 by 2 index arrat.
[,1] [,2]
[,1] 1 3
[,2] 2 2
[,3] 3 1
>x[i] ≠Extract those elements
[1] 9 6 3
> x[i] <- 0 ≠Replace those elements by zeros.
> x
[,1] [,2] [,3] [,4] [,5]
[,1] 1 5 0 13 17
[,2] 2 0 10 14 18
[,3] 0 7 11 15 19
[,4] 4 8 12 16 20
2.3.3 تابع( ) array
آرايه ها مي توانند توسط تابع ( )array از بردارها ساخته شوند و داراي فرم زير مي باشند:
z <- array(data-vector , dim-vector)
یا
z <- array(بردار بعد، بردار داده ها)
براي مثال اگرh يك برداري كه شامل 24 عضو باشد را در نظر بگيريم آنگاه دستور:
> z <- array(h , dim=c(3,4,2))
بردارh را در z بصورت يك آرايه ي 3در 4 در2 قرار مي دهد. اگر اندازه يh دقيقا 24 باشد نتيجه مشابه با دستور:
> dim(z) <- c(3,4,2)
بدست می آید. اگر تعداد عناصر h كمتر از24باشد مقادير ابتدايي بجاي جاهاي خالي قرار مي گيرند تا 24 تا كامل شود. دستور زير آرايه ي z را مي سازد كه تمام عناصر آن صفر مي باشد:
> z <- array(0 , c(3,4,2))
2.3.4 ضرب خارجي دو آرايه
يك عملگر مهم از آرايه ها ضرب خارجي مي باشد. اگرa وb دو آرايه ي عددي باشند ضرب خارجي آنها آرايه اي است كه بردار بعد از تسلسل دو بردار بُعد بوجود مي آيد و بردار داده وقتي شكل مي گيرد كه ضرب اعضاي بردارa با بردارb امكان پذير باشد. ضرب خارجي توسط عملگر%o% صورت مي گيرد:
> ab <- a %o% b
يا
> ab <- outer(a,b,"*")
بجاي تابع ضرب مي توان تابع اختياري قرار داد كه از دو متغير تشكيل شده باشد؛ براي مثال فرض كنيد x وy دو بردار باشند و(f(x,y)=cos(y)/(1+x^2 تابع مورد نظر باشد، در اين صورت داريم:
> f <- function(x,y) cos(y)/(1+x^2)
> z <- outer(x, y, f)
این وبلاگ برای کلیه دوست داران آماری مکانی برای درج مطالب آماری ، ارائه مقالات تخصصی خواهد بود.