Bird
Raised Fist0
R Programmingprogramming~10 mins

Apply functions on matrices in R Programming - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Apply functions on matrices
Start with Matrix
↓
Choose function to apply
↓
Select margin: rows or columns
↓
Apply function to each row/column
↓
Return result vector or matrix
We start with a matrix, pick a function, decide to apply it by rows or columns, then get the result.
Execution Sample
R Programming
mat <- matrix(1:6, nrow=2)
apply(mat, 1, sum)
apply(mat, 2, mean)
This code creates a 2x3 matrix, sums each row, then finds the mean of each column.
Execution Table
StepActionMatrix StateFunction AppliedResult
1Create matrix mat[[1,3,5],[2,4,6]]NoneMatrix created
2Apply sum by rows (margin=1)[[1,3,5],[2,4,6]]sum[9, 12] (row sums)
3Apply mean by columns (margin=2)[[1,3,5],[2,4,6]]mean[1.5, 3.5, 5.5] (column means)
4EndSame matrixNoneFinished applying functions
💡 All rows and columns processed, function applied as requested
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
matNULL[[1,3,5],[2,4,6]][[1,3,5],[2,4,6]][[1,3,5],[2,4,6]][[1,3,5],[2,4,6]]
result_row_sumNULLNULL[9, 12][9, 12][9, 12]
result_col_meanNULLNULLNULL[1.5, 3.5, 5.5][1.5, 3.5, 5.5]
Key Moments - 3 Insights
Why does apply(mat, 1, sum) return a vector of length 2?
Because margin=1 means apply the function to each row. The matrix has 2 rows, so sum is calculated twice, once per row (see execution_table step 2).
What does margin=2 mean in apply(mat, 2, mean)?
Margin=2 means apply the function to each column. The matrix has 3 columns, so mean is calculated for each column separately (see execution_table step 3).
Does the original matrix change after apply?
No, apply does not modify the original matrix. It returns a new vector or matrix with results. The original matrix stays the same (see variable_tracker for 'mat').
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what is the sum of the first row?
A12
B6
C9
D3
💡 Hint
Check the 'Result' column at step 2 in execution_table for row sums.
At which step does the mean function get applied to columns?
AStep 3
BStep 2
CStep 1
DStep 4
💡 Hint
Look at the 'Function Applied' column in execution_table to find when 'mean' is applied.
If we change margin=1 to margin=2 in apply(mat, 1, sum), what changes in the result?
ASum is calculated for each row instead of columns
BSum is calculated for each column instead of rows
CResult becomes a matrix instead of a vector
DNo change in result
💡 Hint
Refer to key_moments about margin meaning and execution_table steps 2 and 3.
Concept Snapshot
apply(matrix, margin, function)
margin=1 applies function to rows
margin=2 applies function to columns
Returns vector or matrix of results
Original matrix stays unchanged
Full Transcript
This visual trace shows how to use the apply function on matrices in R. We start by creating a matrix named mat with 2 rows and 3 columns. Then, we apply the sum function to each row by setting margin=1, which returns a vector of row sums. Next, we apply the mean function to each column by setting margin=2, which returns a vector of column means. The original matrix remains unchanged throughout. The key points are that margin=1 means rows, margin=2 means columns, and apply returns new results without modifying the original matrix.

Practice

(1/5)
1. In R, what does the apply() function do when used on a matrix?
easy
A. It creates a new matrix with doubled values.
B. It converts the matrix into a vector.
C. It sorts the matrix elements in ascending order.
D. It applies a function to each row or column of the matrix.

Solution

  1. Step 1: Understand the purpose of apply()

    The apply() function is designed to run a function on margins of an array or matrix.
  2. Step 2: Identify what margins mean in a matrix

    Margin 1 means rows, margin 2 means columns. So apply() runs the function on each row or column.
  3. Final Answer:

    It applies a function to each row or column of the matrix. -> Option D
  4. Quick Check:

    apply() = function on rows/columns [OK]
Hint: Remember: MARGIN=1 rows, MARGIN=2 columns in apply() [OK]
Common Mistakes:
  • Thinking apply() changes matrix shape automatically
  • Confusing apply() with sorting or vector conversion
  • Using apply() without specifying margin
2. Which of the following is the correct syntax to calculate the sum of each column in a matrix m using apply() in R?
easy
A. apply(m, 2, sum)
B. apply(m, sum, 2)
C. apply(m, 1, sum)
D. apply(sum, m, 2)

Solution

  1. Step 1: Identify margin for columns

    In apply(), margin 2 means columns.
  2. Step 2: Check function placement

    The function to apply (sum) is the third argument, so syntax is apply(m, 2, sum).
  3. Final Answer:

    apply(m, 2, sum) -> Option A
  4. Quick Check:

    sum columns = apply(m, 2, sum) [OK]
Hint: Use margin=2 for columns in apply() [OK]
Common Mistakes:
  • Using margin=1 for columns instead of 2
  • Swapping function and margin arguments
  • Missing the function argument
3. What is the output of the following R code?
m <- matrix(1:6, nrow=2)
apply(m, 1, max)
medium
A. [1] 3 6
B. [1] 4 5
C. [1] 5 6
D. [1] 2 4

Solution

  1. Step 1: Understand the matrix structure

    The matrix m is created with values 1 to 6, 2 rows: Row 1: 1, 3, 5 Row 2: 2, 4, 6
  2. Step 2: Apply max function on rows (margin=1)

    Max of row 1 is 5, max of row 2 is 6.
  3. Final Answer:

    [1] 5 6 -> Option C
  4. Quick Check:

    max per row = 5, 6 [OK]
Hint: Check matrix layout before applying functions [OK]
Common Mistakes:
  • Confusing rows and columns in margin
  • Misreading matrix values
  • Assuming apply returns matrix instead of vector
4. Identify the error in this R code snippet:
m <- matrix(1:9, nrow=3)
apply(m, 3, mean)
medium
A. apply() cannot be used with mean.
B. Margin 3 is invalid for a 2D matrix.
C. Matrix m is not created properly.
D. The function mean is not defined.

Solution

  1. Step 1: Check matrix dimensions

    The matrix m has 2 dimensions (rows and columns).
  2. Step 2: Validate margin argument

    Margin 3 refers to a third dimension, which does not exist in a 2D matrix.
  3. Final Answer:

    Margin 3 is invalid for a 2D matrix. -> Option B
  4. Quick Check:

    Margin must be 1 or 2 for matrices [OK]
Hint: Use only 1 or 2 as margin for 2D matrices [OK]
Common Mistakes:
  • Using margin > 2 for 2D matrices
  • Assuming apply works on non-existent dimensions
  • Confusing apply() with array functions
5. You have a matrix m of numeric values. You want to create a new vector that contains the mean of each row but only for rows where the sum is greater than 10. Which R code correctly does this using apply()?
hard
A. apply(m, 1, function(x) if(sum(x) > 10) mean(x) else NA)[!is.na(.)]
B. apply(m, 1, function(x) if(sum(x) > 10) mean(x))
C. apply(m, 1, function(x) mean(x[sum(x) > 10]))
D. apply(m, 2, function(x) if(sum(x) > 10) mean(x))

Solution

  1. Step 1: Understand the requirement

    We want mean of each row only if that row's sum is > 10, else exclude it.
  2. Step 2: Analyze each option

    A returns NA for rows not >10 but does not remove them. C incorrectly filters inside mean. D uses margin=2 (columns) instead of rows.
  3. Step 3: Correct approach

    apply(m, 1, function(x) if(sum(x) > 10) mean(x) else NA)[!is.na(.)] returns NA for rows with sum ≤ 10, then removes NAs with [!is.na(.)], giving only desired means.
  4. Final Answer:

    apply(m, 1, function(x) if(sum(x) > 10) mean(x) else NA)[!is.na(.)] -> Option A
  5. Quick Check:

    Filter rows by sum > 10, then mean [OK]
Hint: Use if-else inside apply and remove NA after [OK]
Common Mistakes:
  • Using margin=2 instead of 1 for rows
  • Not handling rows with sum ≤ 10 properly
  • Trying to filter inside mean() incorrectly
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