Bird
Raised Fist0
R Programmingprogramming~5 mins

Accessing elements ([], [[]], $) in R Programming

Choose your learning style10 modes available
Introduction

We use different ways to get parts of data from lists or data frames in R. This helps us work with the exact piece we want.

When you want to get one or more columns from a data frame.
When you want to get a single element from a list.
When you want to get a named element from a list or data frame easily.
Syntax
R Programming
x[i]       # Get elements by index or name, returns a list or subset
x[[i]]     # Get a single element by index or name, returns the element itself
x$name     # Get element by name, works like x[["name"]]

[] keeps the structure (like a list or data frame).

[[]] extracts the actual element inside.

Examples
Shows difference between [] and [[]] and using $ to get named elements.
R Programming
my_list <- list(a = 1:3, b = "hello")
my_list["a"]    # returns a list with element 'a'
my_list[["a"]]  # returns the vector 1:3
my_list$a        # returns the vector 1:3
Accessing columns in a data frame using different methods.
R Programming
df <- data.frame(x = 1:3, y = c("a", "b", "c"))
df["x"]    # returns a data frame with column x
df[["x"]]  # returns the vector 1, 2, 3
df$x        # returns the vector 1, 2, 3
Sample Program

This program shows how to access elements from a list using [], [[]], and $. The first print shows a list with one element. The next two prints show the vector inside.

R Programming
my_list <- list(numbers = 10:12, letters = c("x", "y", "z"))

# Using [] returns a list
print(my_list["numbers"])

# Using [[]] returns the vector inside
print(my_list[["numbers"]])

# Using $ returns the vector inside
print(my_list$numbers)
OutputSuccess
Important Notes

Use [] when you want to keep the original structure (like a list or data frame).

Use [[]] or $ to get the actual element inside, like a vector or number.

$ only works with names that are valid variable names (no spaces or special characters).

Summary

[] returns a subset keeping the original structure.

[[]] extracts a single element inside the list or data frame.

$ is a shortcut to get named elements easily.

Practice

(1/5)
1. In R, which operator would you use to extract a single element from a list while removing the list structure?
easy
A. [[]]
B. []
C. $
D. :

Solution

  1. Step 1: Understand list element extraction

    The [[]] operator extracts a single element from a list and returns it without the list structure.
  2. Step 2: Compare with other operators

    The [] operator returns a subset as a list, $ is a shortcut for named elements but also returns the element itself, and : is a sequence operator unrelated to extraction.
  3. Final Answer:

    [[]] -> Option A
  4. Quick Check:

    Single element extraction = [[]] [OK]
Hint: Use double brackets [[]] to get single elements from lists [OK]
Common Mistakes:
  • Using [] returns a list subset, not a single element
  • Confusing $ with [[]] for unnamed elements
  • Using : operator for extraction
2. Which of the following is the correct syntax to access the column named age from a data frame df using the $ operator?
easy
A. df[[age]]
B. df[age]
C. df$age
D. df$"age"

Solution

  1. Step 1: Understand $ operator usage

    The $ operator accesses named elements directly by their name without quotes.
  2. Step 2: Check syntax correctness

    df$age is correct. df[age] is incorrect because age is not quoted or defined as a variable. df[[age]] expects a variable or string inside double brackets. df$"age" is invalid syntax.
  3. Final Answer:

    df$age -> Option C
  4. Quick Check:

    Access named column with $ and name directly [OK]
Hint: Use df$columnName without quotes to access columns [OK]
Common Mistakes:
  • Putting quotes inside $ operator like df$"age"
  • Using single brackets without quotes
  • Confusing [[]] with $ syntax
3. Given the list lst <- list(a = 1:3, b = 4:6), what is the output of lst["a"]?
medium
A. 1 2 3
B. 4 5 6
C. NULL
D. list(a = 1:3)

Solution

  1. Step 1: Understand single bracket extraction on lists

    Using single brackets [] with a name returns a sublist containing that element, preserving the list structure.
  2. Step 2: Apply to given list

    lst["a"] returns a list with element named 'a' containing 1:3, not just the vector 1 2 3.
  3. Final Answer:

    list(a = 1:3) -> Option D
  4. Quick Check:

    Single bracket returns sublist = list(a = 1:3) [OK]
Hint: Single brackets [] return sublist, double brackets [[]] extract element [OK]
Common Mistakes:
  • Expecting [] to return just the vector inside
  • Confusing [] and [[]] behavior
  • Assuming output is NULL or wrong element
4. Consider the code:
df <- data.frame(x = 1:3, y = 4:6)
value <- df[["z"]]
What is the error and how to fix it?
medium
A. Syntax error; fix by adding quotes around z
B. Error: subscript out of bounds; fix by using an existing column name
C. No error; value will be NULL
D. Error: object 'z' not found; fix by defining z first

Solution

  1. Step 1: Identify the error cause

    The data frame df has columns 'x' and 'y' but no 'z'. Accessing df[["z"]] causes a subscript out of bounds error.
  2. Step 2: Fix the error

    Use a valid column name like 'x' or 'y' inside double brackets to avoid the error.
  3. Final Answer:

    Error: subscript out of bounds; fix by using an existing column name -> Option B
  4. Quick Check:

    Accessing non-existent column causes subscript error [OK]
Hint: Check column names before using [[]] to avoid subscript errors [OK]
Common Mistakes:
  • Assuming [[]] returns NULL if column missing
  • Confusing syntax error with runtime error
  • Not verifying column existence before access
5. You have a list lst <- list(name = "Alice", scores = c(90, 85, 88)). Which code correctly extracts the second score?
hard
A. lst$scores[2]
B. lst["scores"][2]
C. lst$scores["2"]
D. lst[[scores]][2]

Solution

  1. Step 1: Understand list element access

    lst$scores accesses the vector of scores directly.
  2. Step 2: Extract the second element from the vector

    Using [2] on the vector gets the second score. So lst$scores[2] works correctly.
  3. Step 3: Check other options

    lst["scores"][2] uses single brackets which returns a list, and indexing a length-1 list with [2] causes subscript out of bounds. lst$scores["2"] uses character index on unnamed vector, returns NA. lst[[scores]][2] is invalid because scores is not quoted.
  4. Final Answer:

    lst$scores[2] -> Option A
  5. Quick Check:

    Use $ to get vector, then [2] for element [OK]
Hint: Use $ to get vector, then [index] for element inside [OK]
Common Mistakes:
  • Using single brackets [] on list then [2] on sublist (out of bounds)
  • Using character index ["2"] on unnamed vector (returns NA)
  • Not quoting names inside [[]]
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