تمرین تشکیل حلقه با توابع خانواده apply در R
دسترسی سریع
->dataclass<
((data.frame(score=c(38.5,28.9,25.6,45),grade=c(5,5,6,4),age=c(17,16,15,15
( mean(dataclass$score<
[1] 34.5
( mean(dataclass$grade<
[1] 5
( mean(dataclass$age<
[1] 15.75
مقادیر سه متغیر grade-score-age در آبجکتی تحت عنوان data frame نسبت داده شده اند. که بهترین روش وارد کردن داده ها در R تشکیل یک ساختار چارچوب دار است. ساده ترین روش برای وارد کردن داده های کم حجم استفاده از تابع (cc) است حال با استفاده از دستور mean(data$...) میانگین هر متغیر به طور جداگانه حساب شده. همانطور که مشاهده میکنیم، برای محاسبه میانگین متغیر ها تابع apply به کار رفته است. تابع apply() تشکیل یک حلقه داده است که در آن تابع mean() در هر دور به ترتیب روی یکی از متغیر ها به کار رفته است. همان گونه که مشاهده میشود میانگین همه متغیر ها مستلزم به کارگیری تابع mean() به تعداد متغیر هاست. روش دیگر استفاده از تابع apply() میباشد.(Apply(dataclass, 2 , mean<
Score grade age
34.50 5.00 15.75
با دستور apply() هر سه متغیر میانگین هایشان به صورت یک جا آورده شده است. برهان دوم که در اینجا 2 در نظر گرفته شده است به تابع میگوید که میانگین روی ستون ها محسبه گردد و یا روی ردیف ها( برهان برابر با 1). همان گونه که ملاحظه تابع mean() در هر دور به ترتیب روی یکی از متغیر ها به کار میرود. تابع by() نیز عملکردی شبیه به توابع خانواده apply دارد که میتواند محاسبات را روی یکی بخش های مشخصی از داده ها به کار ببرد. برای آشنایی با نهوه استفاده از تابع by() مثالی از کتاب طرح های آزمایشی در کشاورزی1 (ولی زاده و مقدم 1375) را که پیش تر در بحث اسپلیت پلات (فصل 6) مورد تجزیه قرار گرفت را بررسی مینماییم.( data.fertilizer<-read.table("D:\\my data\\root.txt",header=T<
data.fertilizer<
block nitrogen green root
1 1 1 1 34.086
2 1 1 2 38.285
3 1 1 3 51.870
4 1 1 4 46.683
5 1 2 1 47.671
6 1 2 2 54.834
7 1 2 3 62.491
8 1 2 4 63.973
9 2 1 1 33.345
10 2 1 2 37.050
11 2 1 3 56.069
12 2 1 4 45.201
13 2 2 1 44.460
14 2 2 2 59.774
15 2 2 3 61.256
16 2 2 4 65.949
17 3 1 1 32.604
18 3 1 2 37.544
19 3 1 3 55.081
20 3 1 4 48.412
21 3 2 1 50.635
22 3 2 2 62.738
23 3 2 3 70.148
24 3 2 4 68.172
( attach(data.fertilizer<
در این قسمت از داده های فصل 6 استفاده شده است. داده ها را در excel وارد و در text ذخیره کردیم و با استفاده از دستور read.table برای فراخوانی داده ها در R استفاده کردیم. (header=T به برنامه میگوید تا نام متغیر ها در فایل اصلی داده ها معتبر باشد) چنانچه داده ها پیوست نشده اند، قبل از اجرای دستور فوق باید آنهارا با تابع attach() پیوست نماییم. در واقع برای دسترسی مستقیم به متغیر های موجود در داده، از تابع attach() استفاده شد( by(data.fertilizer[4],green,mean<
green: 1
40.46683[1]
------------------------------------------------------------
green: 2
48.37083[1]
------------------------------------------------------------
green: 3
59.48583[1]
------------------------------------------------------------
green: 4
56.39833[1]
همان طورکه مشاهده میشود تابع by() به برنامه میگوید که میانگین متغیر root را برای سطوح متغیر green محاسبه نماید. By() عملکردی همانند apply() دارد. در اینجا از ستون data.fertilizer میانگین معغیر را برای سطح gren به دست آوردیم. میانگین 1-2-3-4 هرکدام جداگانه حساب شده اند. برای green(1)= 40.46683 – 2:43.37083 – 3=50.48583 – 4=56.39833Examples
## Compute row and column sums for a matrix:
x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
apply(x, 2, mean, trim = .2)
col.sums <- apply(x, 2, sum)
row.sums <- apply(x, 1, sum)
rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums)))
stopifnot( apply(x, 2, is.vector))
## Sort the columns of a matrix
apply(x, 2, sort)
##- function with extra args:
cave <- function(x, c1, c2) c(mean(x[c1]), mean(x[c2]))
apply(x, 1, cave, c1 = "x1", c2 = c("x1","x2"))
ma <- matrix(c(1:4, 1, 6:8), nrow = 2)
ma
apply(ma, 1, table) #--> a list of length 2
apply(ma, 1, stats::quantile) # 5 x n matrix with rownames
stopifnot(dim(ma) == dim(apply(ma, 1:2, sum)))
## Example with different lengths for each call
z <- array(1:24, dim = 2:4)
zseq <- apply(z, 1:2, function(x) seq_len(max(x)))
zseq ## a 2 x 3 matrix
typeof(zseq) ## list
dim(zseq) ## 2 3
zseq[1,]
apply(z, 3, function(x) seq_len(max(x)))
# a list without a dim attribute
حلقه ی apply یک تابع است که ما یک آرایه دارای مقداری ماتریکس جدا رو بهش میدهیم و پس از مشخص کردن یک تابع در آرگومان بعدی ، کاری را که میخواهیم روی آرایه اعمال شود را تعریف میکنیم. مثالApply(myData, score , mean)
- که در اینجا myData آرایه ی اصلی ما است(main) و score یک عضو از آرایه myData است که خود نیز یک آرایه ( ماتریکس) است.
- در آخرین آرگومان کلمه ی mean نشان میدهد باید روی هر ماتریکس از آرایه اصلی، میانگین را حساب کرده و برای ما برگرداند.
نظرات
هیچ نظری وجود ندارد.
افزودن نظر
Sitemap
Copyright © 2017 - 2023 Khavarzadeh®. All rights reserved