Bird
Raised Fist0
R Programmingprogramming~5 mins

Apply functions on matrices in R Programming

Choose your learning style10 modes available
Introduction
Applying functions on matrices helps you quickly calculate values like sums or averages for rows or columns without writing loops.
You want to find the sum of each row in a table of numbers.
You need the average value of each column in a data set.
You want to apply a custom calculation to every row or column.
You want to check the maximum or minimum value in each row or column.
Syntax
R Programming
apply(X, MARGIN, FUN, ...)

# X: matrix or array
# MARGIN: 1 for rows, 2 for columns
# FUN: function to apply
# ...: additional arguments to FUN
Use MARGIN = 1 to apply the function to each row.
Use MARGIN = 2 to apply the function to each column.
Examples
Sum of each row in the matrix.
R Programming
mat <- matrix(1:6, nrow=2)
apply(mat, 1, sum)
Average of each column in the matrix.
R Programming
mat <- matrix(1:6, nrow=2)
apply(mat, 2, mean)
Maximum value in each row.
R Programming
mat <- matrix(1:9, nrow=3)
apply(mat, 1, max)
Sample Program
This program creates a 2x3 matrix, calculates the sum of each row and the average of each column, then prints the results.
R Programming
mat <- matrix(c(4, 7, 2, 9, 5, 1), nrow=2)
row_sums <- apply(mat, 1, sum)
col_means <- apply(mat, 2, mean)
print(row_sums)
print(col_means)
OutputSuccess
Important Notes
The apply function returns a vector or array depending on the function and margin.
You can use any function that works on a vector, like sum, mean, max, min, or your own custom function.
If you want to apply functions on higher dimensions, you can use arrays with apply.
Summary
Use apply() to run a function on rows or columns of a matrix easily.
Set MARGIN to 1 for rows, 2 for columns.
Great for quick calculations like sums, means, or max values.

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