Bird
Raised Fist0
R Programmingprogramming~20 mins

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

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
S4 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 S4 class slot access?
Consider the following R code using S4 classes. What will be printed when accessing the slot @name?
R Programming
setClass("Person", slots = list(name = "character", age = "numeric"))
p <- new("Person", name = "Alice", age = 30)
print(p@name)
A[1] "Alice"
B[1] 30
CError: no slot of name "name" for this object of class "Person"
D[1] "p@name"
Attempts:
2 left
💡 Hint
Remember that slots in S4 objects are accessed with the @ operator.
🧠 Conceptual
intermediate
1:30remaining
Which statement about S4 class inheritance is true?
In R's S4 system, which of the following is true about class inheritance?
AAn S4 class can inherit from multiple classes simultaneously.
BAn S4 class can only inherit from one class at a time.
CInheritance is automatically applied to all slots without declaration.
DInheritance is not supported in S4 classes.
Attempts:
2 left
💡 Hint
Think about how S4 supports complex class hierarchies.
🔧 Debug
advanced
2:30remaining
Identify the error in this S4 method definition
What error will this code produce when defining an S4 method?
R Programming
setGeneric("greet", function(object) standardGeneric("greet"))
setMethod("greet", "Person", function(obj) {
  paste("Hello", obj@name)
})
AError: no slot of name "name" for this object of class "Person"
BError: formal argument "object" matched by multiple actual arguments
CError: unused argument (obj)
DNo error; method defined successfully
Attempts:
2 left
💡 Hint
Check the argument names in generic and method functions.
📝 Syntax
advanced
1:30remaining
Which option correctly defines an S4 class with a numeric slot 'score' and a character slot 'grade'?
Choose the correct syntax to define an S4 class named 'Result' with slots 'score' (numeric) and 'grade' (character).
AsetClass("Result", slots = list(score = numeric, grade = character))
BsetClass("Result", slot = list(score = numeric, grade = character))
CsetClass("Result", slots = c(score = numeric, grade = character))
DsetClass("Result", slots = list(score = "numeric", grade = "character"))
Attempts:
2 left
💡 Hint
Slots must be declared as a named list with class names as strings.
🚀 Application
expert
3:00remaining
How many slots does this S4 object have after inheritance?
Given these class definitions, how many slots does an object of class 'Student' have?
R Programming
setClass("Person", slots = list(name = "character", age = "numeric"))
setClass("Employee", slots = list(employeeID = "character"))
setClass("Student", contains = c("Person", "Employee"), slots = list(grade = "character"))
obj <- new("Student", name = "Bob", age = 22, employeeID = "E123", grade = "A")
A5
B2
C4
D3
Attempts:
2 left
💡 Hint
Count all slots from inherited classes plus new slots.

Practice

(1/5)
1. What is the main purpose of the S4 object system in R?
easy
A. To visualize data with plots
B. To perform fast numerical calculations
C. To create formal classes with defined slots and types
D. To manage file input and output

Solution

  1. Step 1: Understand S4 system basics

    The S4 system in R is designed to create formal classes with named slots and specific data types.
  2. Step 2: Compare with other options

    Options A, B, and D describe other R functionalities unrelated to S4 classes.
  3. Final Answer:

    To create formal classes with defined slots and types -> Option C
  4. Quick Check:

    S4 system = formal classes with slots [OK]
Hint: S4 means formal classes with slots, not calculations or plots [OK]
Common Mistakes:
  • Confusing S4 with data visualization
  • Thinking S4 is for fast math
  • Mixing S4 with file handling
2. Which of the following is the correct way to define an S4 class named Person with slots name (character) and age (numeric)?
easy
A. setClass("Person", slots = list(name = "character", age = "numeric"))
B. class(Person) <- list(name = character, age = numeric)
C. Person <- function(name, age) list(name = name, age = age)
D. newClass("Person", fields = c(name = "character", age = "numeric"))

Solution

  1. Step 1: Recall S4 class definition syntax

    In R, setClass is used with the class name and a named list of slots with their types.
  2. Step 2: Check each option

    setClass("Person", slots = list(name = "character", age = "numeric")) uses setClass correctly. Options A, B, and C use incorrect syntax or functions not related to S4.
  3. Final Answer:

    setClass("Person", slots = list(name = "character", age = "numeric")) -> Option A
  4. Quick Check:

    Use setClass with slots list [OK]
Hint: Use setClass() with slots list to define S4 classes [OK]
Common Mistakes:
  • Using base R list or function instead of setClass
  • Wrong function names like newClass
  • Assigning class with <- instead of setClass
3. What will be the output of this R code?
setClass("Car", slots = list(make = "character", year = "numeric"))
myCar <- new("Car", make = "Toyota", year = 2020)
myCar@make
medium
A. "Toyota"
B. 2020
C. Error: object 'myCar' not found
D. "make"

Solution

  1. Step 1: Understand class and object creation

    The class "Car" has slots "make" (character) and "year" (numeric). The object myCar is created with make = "Toyota" and year = 2020.
  2. Step 2: Access the slot value

    Using myCar@make accesses the "make" slot, which holds the string "Toyota".
  3. Final Answer:

    "Toyota" -> Option A
  4. Quick Check:

    Slot access with @ returns "Toyota" [OK]
Hint: Use @ to access slot values in S4 objects [OK]
Common Mistakes:
  • Using $ instead of @ to access slots
  • Confusing slot names with values
  • Expecting numeric output instead of character
4. Identify the error in this S4 method definition and select the correct fix:
setClass("Animal", slots = list(name = "character"))
setGeneric("speak", function(object) standardGeneric("speak"))
setMethod("speak", "Animal", function(object) {
  paste(object$name, "makes a sound")
})
medium
A. Change setGeneric to setMethod
B. Use object@name instead of object$name in the method
C. Remove the function argument 'object' from setGeneric
D. Use $ instead of @ to access slots

Solution

  1. Step 1: Check slot access in S4 objects

    S4 objects require slot access with @, not $. The code uses object$name which is incorrect.
  2. Step 2: Correct the slot access

    Replace object$name with object@name to properly access the slot in the method.
  3. Final Answer:

    Use object@name instead of object$name in the method -> Option B
  4. Quick Check:

    S4 slots accessed with @, not $ [OK]
Hint: Always use @ to access S4 slots inside methods [OK]
Common Mistakes:
  • Using $ to access slots in S4 objects
  • Confusing setGeneric and setMethod roles
  • Omitting function argument in setGeneric
5. You want to create an S4 class Rectangle with slots length and width (both numeric). Then define a method area that returns the product of length and width. Which code correctly implements this?
hard
A. setClass("Rectangle", slots = list(length = "numeric", width = "numeric")) setMethod("area", "Rectangle", function(object) { object$length * object$width })
B. setClass("Rectangle", fields = c(length = "numeric", width = "numeric")) area <- function(object) object$length * object$width
C. Rectangle <- function(length, width) list(length = length, width = width) area <- function(object) object$length * object$width
D. setClass("Rectangle", slots = list(length = "numeric", width = "numeric")) setGeneric("area", function(object) standardGeneric("area")) setMethod("area", "Rectangle", function(object) { object@length * object@width })

Solution

  1. Step 1: Define the S4 class correctly

    Use setClass with slots named length and width as numeric types.
  2. Step 2: Define generic and method properly

    Create a generic function area with setGeneric, then define a method for class "Rectangle" using setMethod. Access slots with @ inside the method.
  3. Step 3: Check other options for errors

    setClass("Rectangle", fields = c(length = "numeric", width = "numeric")) area <- function(object) object$length * object$width uses incorrect slot definition syntax. Rectangle <- function(length, width) list(length = length, width = width) area <- function(object) object$length * object$width uses a list, not S4. setClass("Rectangle", slots = list(length = "numeric", width = "numeric")) setMethod("area", "Rectangle", function(object) { object$length * object$width }) uses $ instead of @ to access slots.
  4. Final Answer:

    Correct S4 class and method with slot access via @ -> Option D
  5. Quick Check:

    S4 class + setGeneric + setMethod + @ slot access [OK]
Hint: Define class with setClass, method with setGeneric/setMethod, use @ for slots [OK]
Common Mistakes:
  • Using $ instead of @ to access slots
  • Defining class slots incorrectly
  • Not creating generic before method
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard