S3 System Exercises
This notebook contains exercises to help you practice working with
the S3 system in R. Complete the exercises below to improve your
understanding of S3 classes, methods, and generic functions.
Exercise 1: Creating an S3 Class
Create an S3 class called student
with the following
attributes: - name (character) - age (numeric) - grades (numeric
vector)
Then, create an instance of this class for a student named “Alice”
who is 20 years old and has grades 85, 92, and 78.
# Your code here
Exercise 2: Creating a Method
Create a method for the generic function print
that
works with your student
class. The method should display
the student’s name, age, and average grade.
# Your code here
Exercise 3: Creating a Generic Function
Create a generic function called get_letter_grade
that
takes a numeric grade as input and returns the corresponding letter
grade according to the following scale: - 90-100: A - 80-89: B - 70-79:
C - 60-69: D - Below 60: F
Then, create a method for this generic function that works with your
student
class. The method should return a vector of letter
grades corresponding to the student’s numeric grades.
# Your code here
Exercise 4: Inheritance
Create a new S3 class called graduate_student
that
inherits from the student
class. Add an additional
attribute called research_topic
(character).
Create an instance of the graduate_student
class for a
student named “Bob” who is 25 years old, has grades 88, 94, and 91, and
is researching “Machine Learning”.
# Your code here
Exercise 5: Method Dispatch
Create a method for the print
generic function that
works with your graduate_student
class. This method should
display all the information from the student
class print
method, as well as the research topic.
# Your code here
Now, test your classes and methods by creating instances of both
student
and graduate_student
classes and
calling the print
and get_letter_grade
functions on them.
# Your code here
Great job completing these exercises! Check your answers in the
accompanying answer key.
LS0tCnRpdGxlOiAiUzMgU3lzdGVtIEV4ZXJjaXNlcyBpbiBSIgphdXRob3I6ICJOYXllbCBCZXR0YWNoZSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIFMzIFN5c3RlbSBFeGVyY2lzZXMKClRoaXMgbm90ZWJvb2sgY29udGFpbnMgZXhlcmNpc2VzIHRvIGhlbHAgeW91IHByYWN0aWNlIHdvcmtpbmcgd2l0aCB0aGUgUzMgc3lzdGVtIGluIFIuIENvbXBsZXRlIHRoZSBleGVyY2lzZXMgYmVsb3cgdG8gaW1wcm92ZSB5b3VyIHVuZGVyc3RhbmRpbmcgb2YgUzMgY2xhc3NlcywgbWV0aG9kcywgYW5kIGdlbmVyaWMgZnVuY3Rpb25zLgoKIyMgRXhlcmNpc2UgMTogQ3JlYXRpbmcgYW4gUzMgQ2xhc3MKCkNyZWF0ZSBhbiBTMyBjbGFzcyBjYWxsZWQgYHN0dWRlbnRgIHdpdGggdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgotIG5hbWUgKGNoYXJhY3RlcikKLSBhZ2UgKG51bWVyaWMpCi0gZ3JhZGVzIChudW1lcmljIHZlY3RvcikKClRoZW4sIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGZvciBhIHN0dWRlbnQgbmFtZWQgIkFsaWNlIiB3aG8gaXMgMjAgeWVhcnMgb2xkIGFuZCBoYXMgZ3JhZGVzIDg1LCA5MiwgYW5kIDc4LgoKYGBge3J9CiMgWW91ciBjb2RlIGhlcmUKYGBgCgojIyBFeGVyY2lzZSAyOiBDcmVhdGluZyBhIE1ldGhvZAoKQ3JlYXRlIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBgcHJpbnRgIHRoYXQgd29ya3Mgd2l0aCB5b3VyIGBzdHVkZW50YCBjbGFzcy4gVGhlIG1ldGhvZCBzaG91bGQgZGlzcGxheSB0aGUgc3R1ZGVudCdzIG5hbWUsIGFnZSwgYW5kIGF2ZXJhZ2UgZ3JhZGUuCgpgYGB7cn0KIyBZb3VyIGNvZGUgaGVyZQpgYGAKCiMjIEV4ZXJjaXNlIDM6IENyZWF0aW5nIGEgR2VuZXJpYyBGdW5jdGlvbgoKQ3JlYXRlIGEgZ2VuZXJpYyBmdW5jdGlvbiBjYWxsZWQgYGdldF9sZXR0ZXJfZ3JhZGVgIHRoYXQgdGFrZXMgYSBudW1lcmljIGdyYWRlIGFzIGlucHV0IGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGxldHRlciBncmFkZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBzY2FsZToKLSA5MC0xMDA6IEEKLSA4MC04OTogQgotIDcwLTc5OiBDCi0gNjAtNjk6IEQKLSBCZWxvdyA2MDogRgoKVGhlbiwgY3JlYXRlIGEgbWV0aG9kIGZvciB0aGlzIGdlbmVyaWMgZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIHlvdXIgYHN0dWRlbnRgIGNsYXNzLiBUaGUgbWV0aG9kIHNob3VsZCByZXR1cm4gYSB2ZWN0b3Igb2YgbGV0dGVyIGdyYWRlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdHVkZW50J3MgbnVtZXJpYyBncmFkZXMuCgpgYGB7cn0KIyBZb3VyIGNvZGUgaGVyZQpgYGAKCiMjIEV4ZXJjaXNlIDQ6IEluaGVyaXRhbmNlCgpDcmVhdGUgYSBuZXcgUzMgY2xhc3MgY2FsbGVkIGBncmFkdWF0ZV9zdHVkZW50YCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGBzdHVkZW50YCBjbGFzcy4gQWRkIGFuIGFkZGl0aW9uYWwgYXR0cmlidXRlIGNhbGxlZCBgcmVzZWFyY2hfdG9waWNgIChjaGFyYWN0ZXIpLgoKQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBgZ3JhZHVhdGVfc3R1ZGVudGAgY2xhc3MgZm9yIGEgc3R1ZGVudCBuYW1lZCAiQm9iIiB3aG8gaXMgMjUgeWVhcnMgb2xkLCBoYXMgZ3JhZGVzIDg4LCA5NCwgYW5kIDkxLCBhbmQgaXMgcmVzZWFyY2hpbmcgIk1hY2hpbmUgTGVhcm5pbmciLgoKYGBge3J9CiMgWW91ciBjb2RlIGhlcmUKYGBgCgojIyBFeGVyY2lzZSA1OiBNZXRob2QgRGlzcGF0Y2gKCkNyZWF0ZSBhIG1ldGhvZCBmb3IgdGhlIGBwcmludGAgZ2VuZXJpYyBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggeW91ciBgZ3JhZHVhdGVfc3R1ZGVudGAgY2xhc3MuIFRoaXMgbWV0aG9kIHNob3VsZCBkaXNwbGF5IGFsbCB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgYHN0dWRlbnRgIGNsYXNzIHByaW50IG1ldGhvZCwgYXMgd2VsbCBhcyB0aGUgcmVzZWFyY2ggdG9waWMuCgpgYGB7cn0KIyBZb3VyIGNvZGUgaGVyZQpgYGAKCk5vdywgdGVzdCB5b3VyIGNsYXNzZXMgYW5kIG1ldGhvZHMgYnkgY3JlYXRpbmcgaW5zdGFuY2VzIG9mIGJvdGggYHN0dWRlbnRgIGFuZCBgZ3JhZHVhdGVfc3R1ZGVudGAgY2xhc3NlcyBhbmQgY2FsbGluZyB0aGUgYHByaW50YCBhbmQgYGdldF9sZXR0ZXJfZ3JhZGVgIGZ1bmN0aW9ucyBvbiB0aGVtLgoKYGBge3J9CiMgWW91ciBjb2RlIGhlcmUKYGBgCgpHcmVhdCBqb2IgY29tcGxldGluZyB0aGVzZSBleGVyY2lzZXMhIENoZWNrIHlvdXIgYW5zd2VycyBpbiB0aGUgYWNjb21wYW55aW5nIGFuc3dlciBrZXkuCg==