Why vectors are the fundamental data structure in R Programming - Performance Analysis
We want to understand how the time it takes to work with vectors changes as the size of the vector grows.
How does the number of steps grow when we do common tasks with vectors?
Analyze the time complexity of the following code snippet.
# Create a vector of numbers from 1 to n
n <- 1000
vec <- 1:n
# Sum all elements in the vector
sum_vec <- sum(vec)
# Access the 500th element
element <- vec[500]
This code creates a vector, sums all its elements, and accesses one element by position.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Summing all elements requires looking at each item once.
- How many times: The sum operation goes through all n elements one by one.
When the vector size grows, the sum operation takes longer because it checks each number.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 steps to sum |
| 100 | 100 steps to sum |
| 1000 | 1000 steps to sum |
Pattern observation: The time to sum grows directly with the number of elements.
Time Complexity: O(n)
This means the time to sum all elements grows in a straight line as the vector gets bigger.
[X] Wrong: "Accessing any element in a vector takes longer as the vector grows."
[OK] Correct: Accessing one element by position is very fast and does not depend on vector size.
Knowing how vector operations scale helps you write efficient R code and explain your choices clearly.
"What if we used a list instead of a vector? How would the time complexity for accessing elements change?"
Practice
Solution
Step 1: Understand vector properties in R
Vectors store multiple values but all must be of the same type, arranged in order.Step 2: Compare with other data structures
Unlike lists, vectors cannot hold mixed types, and they are the basic building block for data in R.Final Answer:
Because they hold many values of the same type in order -> Option CQuick Check:
Vectors = same type, ordered values [OK]
- Thinking vectors can hold mixed data types
- Confusing vectors with lists
- Assuming vectors store single values only
Solution
Step 1: Recall vector creation syntax in R
The functionc()combines values into a vector.Step 2: Check other options
vector()creates an empty vector with specified length and mode,list()creates a list, andarray()creates multi-dimensional arrays.Final Answer:
c(1, 2, 3) -> Option DQuick Check:
Use c() to create vectors [OK]
- Using vector() with values directly
- Confusing list() with vector creation
- Using array() for simple vectors
v <- c(10, 20, 30) typeof(v)
Solution
Step 1: Understand default numeric type in R vectors
By default, numbers with decimals or without are stored as double precision floating point numbers.Step 2: Check the vector values
The vector contains 10, 20, 30 which are numeric literals without explicit integer suffix, so they are doubles.Final Answer:
"double" -> Option AQuick Check:
Numeric vectors default to double type [OK]
- Assuming numeric literals are integers by default
- Confusing list type with vector type
- Expecting character type from numbers
v <- c(1, "two", 3)
Solution
Step 1: Analyze vector type coercion rules
R forces all elements in a vector to be the same type, so it converts numbers to characters if any element is character.Step 2: Check the given vector elements
Since "two" is a character, 1 and 3 are converted to characters, so the vector becomes character type.Final Answer:
The vector contains mixed types, so R converts all to character -> Option AQuick Check:
Mixed types in vector cause coercion to character [OK]
- Expecting syntax error from mixed types
- Assuming numeric values stay numeric
- Thinking vector will be empty
Solution
Step 1: Create a numeric vector of ages
Usec()to create a vector holding the ages.Step 2: Add 5 to each element
Adding a number to a vector adds it to each element element-wise.Final Answer:
ages <- c(25, 30, 22, 28) ages <- ages + 5 -> Option BQuick Check:
Vector arithmetic applies element-wise [OK]
- Using list() instead of c() for vector
- Multiplying instead of adding
- Subtracting instead of adding
Ready to prove it?
Pass the test and this pattern moves unknown
