רשימות עם מחלקה
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 אונליין