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.
Accessing elements ([], [[]], $) in 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.
[] and [[]] and using $ to get named elements.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
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
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.
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)
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).
[] 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
Solution
Step 1: Understand list element extraction
The[[]]operator extracts a single element from a list and returns it without the list structure.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.Final Answer:
[[]]-> Option AQuick Check:
Single element extraction =[[]][OK]
- Using [] returns a list subset, not a single element
- Confusing $ with [[]] for unnamed elements
- Using : operator for extraction
age from a data frame df using the $ operator?Solution
Step 1: Understand $ operator usage
The $ operator accesses named elements directly by their name without quotes.Step 2: Check syntax correctness
df$ageis 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.Final Answer:
df$age -> Option CQuick Check:
Access named column with $ and name directly [OK]
- Putting quotes inside $ operator like df$"age"
- Using single brackets without quotes
- Confusing [[]] with $ syntax
lst <- list(a = 1:3, b = 4:6), what is the output of lst["a"]?Solution
Step 1: Understand single bracket extraction on lists
Using single brackets[]with a name returns a sublist containing that element, preserving the list structure.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.Final Answer:
list(a = 1:3) -> Option DQuick Check:
Single bracket returns sublist = list(a = 1:3) [OK]
- Expecting [] to return just the vector inside
- Confusing [] and [[]] behavior
- Assuming output is NULL or wrong element
df <- data.frame(x = 1:3, y = 4:6) value <- df[["z"]]What is the error and how to fix it?
Solution
Step 1: Identify the error cause
The data framedfhas columns 'x' and 'y' but no 'z'. Accessingdf[["z"]]causes a subscript out of bounds error.Step 2: Fix the error
Use a valid column name like 'x' or 'y' inside double brackets to avoid the error.Final Answer:
Error: subscript out of bounds; fix by using an existing column name -> Option BQuick Check:
Accessing non-existent column causes subscript error [OK]
- Assuming [[]] returns NULL if column missing
- Confusing syntax error with runtime error
- Not verifying column existence before access
lst <- list(name = "Alice", scores = c(90, 85, 88)). Which code correctly extracts the second score?Solution
Step 1: Understand list element access
lst$scoresaccesses the vector of scores directly.Step 2: Extract the second element from the vector
Using[2]on the vector gets the second score. Solst$scores[2]works correctly.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.Final Answer:
lst$scores[2] -> Option AQuick Check:
Use $ to get vector, then [2] for element [OK]
- 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 [[]]
Ready to prove it?
Pass the test and this pattern moves unknown
