0
0
R Programmingprogramming~20 mins

S3 object system in R Programming - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
S3 Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this S3 method call?
Consider the following R code using S3 classes and methods. What will be printed when print(obj) is called?
R Programming
obj <- structure(list(name = "Alice", age = 30), class = "person")
print.person <- function(x) {
  cat("Person:", x$name, "is", x$age, "years old\n")
}
print(obj)
APerson: Alice is 30 years old
B[1] "Person: Alice is 30 years old"
Clist(name = "Alice", age = 30)
DError in print.person(obj) : could not find function "print.person"
Attempts:
2 left
💡 Hint
Remember that S3 methods are functions named like generic.class and are called automatically by the generic.
🧠 Conceptual
intermediate
1:30remaining
How does S3 method dispatch work in R?
Which statement best describes how R finds the correct S3 method to call when a generic function is used?
AR always calls the generic function without checking the object's class.
BR uses formal class definitions and inheritance trees to find the method in a class hierarchy.
CR looks for a function named <code>generic.class</code> where <code>class</code> is the class of the object, and calls it if found.
DR requires the user to manually call the method function for each class.
Attempts:
2 left
💡 Hint
Think about the naming pattern of S3 methods.
🔧 Debug
advanced
2:30remaining
Why does this S3 method not get called?
Given the code below, why does summary(obj) not call summary.myclass as expected?
R Programming
obj <- structure(list(x = 1:5), class = "myclass")
summary.myclass <- function(object) {
  # Custom summary
}
summary(obj)
AThe class attribute is not set correctly on <code>obj</code>.
BThe method <code>summary.myclass</code> does not return a value explicitly, so it returns NULL and appears not to work.
CThe generic <code>summary</code> does not support S3 dispatch.
DThe method name should be <code>summary_myclass</code> with underscore.
Attempts:
2 left
💡 Hint
Check what the method function returns.
📝 Syntax
advanced
2:00remaining
Which option correctly defines an S3 method for class 'data.frame' for the generic 'head'?
Choose the correct syntax to define an S3 method head.data.frame that returns the first 3 rows of a dataframe.
A
head.data.frame &lt;- function(x) {
  x[1:3, ]
}
B
head.data.frame &lt;- function(x, n) {
  x[1:n]
}
C
head.data.frame &lt;- function(x) {
  return(x[1:3])
}
D
head.data.frame &lt;- function(x, n = 3) {
  x[1:n, ]
}
Attempts:
2 left
💡 Hint
The original head generic accepts an argument n with default 6.
🚀 Application
expert
2:30remaining
How many items are in the list returned by this S3 generic with multiple classes?
Consider this R code where an object has multiple classes and a generic returns a list. How many elements does the list returned by foo(obj) contain?
R Programming
foo <- function(x) UseMethod("foo")
foo.class1 <- function(x) list(a = 1, b = 2)
foo.class2 <- function(x) list(c = 3)
obj <- structure(list(), class = c("class1", "class2"))
result <- foo(obj)
length(result)
A2
B3
C1
D0
Attempts:
2 left
💡 Hint
S3 dispatch calls the method for the first class in the class vector.