רשימות עם מחלקה
חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 2 מתוך 57.
S3 היא מערכת העצמים הוותיקה והנפוצה ביותר של R. אובייקט S3 הוא רשימה רגילה עם מאפיין class, תווית שמציינת איזה סוג של אובייקט הוא. class(x) <- "dog" מגדיר את התווית:
rex <- list(name = "Rex", age = 3)
class(rex) <- "dog"
print(class(rex))
cat(rex$name, "is", rex$age)פלט:
[1] "dog"
Rex is 3structure() בונה את הערך ומגדירה את התכונות שלו בקריאה אחת, וזו הדרך המקובלת ליצור אובייקט S3. קוראים את השדות באמצעות $, כמו בכל רשימה:
rex <- structure(list(name = "Rex", age = 3), class = "dog")
print(class(rex))
print(is.list(rex))
print(rex$age)פלט:
[1] "dog"
[1] TRUE
[1] 3המחלקה היא רק תווית: R לא בודקת אילו שדות יש לאובייקט, ולכן אפשר לקרוא לכל רשימה dog. unclass() מסירה את התווית ומחזירה את הרשימה הרגילה:
p <- structure(list(x = 1, y = 2), class = "point")
print(unclass(p))פלט:
$x
[1] 1
$y
[1] 2אובייקטי S3 הם ערכים. פונקציה שמשנה אובייקט משנה את העותק שלה, ולכן היא מחזירה את הגרסה החדשה והקורא משייך אותה. המקור נשאר כפי שהיה:
birthday <- function(d) {
d$age <- d$age + 1
d
}
rex <- structure(list(name = "Rex", age = 3), class = "dog")
older <- birthday(rex)
cat(rex$age, older$age)פלט:
3 4אתגר
קלהשלימו את make_pet(name, species, age) בקובץ Pet.R. הפונקציה מחזירה רשימה עם השדות name, species ו-age, בסדר הזה, והמחלקה pet. לאחר מכן השלימו את describe_pet(p), שמחזירה משפט אחד: חיית מחמד בשם Rex, מהמין dog, ובגיל 3 מחזירה את Rex is a 3 year old dog.
הקוד שסופק קורא את השם, המין והגיל, יוצר את חיית המחמד ומדפיס את המחלקה שלה, את שמות השדות שלה ואת המשפט.
הקוד שלכם ייכתב בקובץ Pet.R. הקובץ main.R מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
source("Pet.R")
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
p <- make_pet(input[1], input[2], as.numeric(input[3]))
cat("class: ", class(p), "\n", sep = "")
cat("fields: ", paste(names(p), collapse = ", "), "\n", sep = "")
cat(describe_pet(p), "\n", sep = "")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות S3
עבודה עם קבציםרשימות עם מחלקהפונקציות בנאימתודות print ו-formatמאמתים ופונקציות עזרחזרה – טמפרטורותתרגלו בעצמכם: קומפיילר R אונליין