Bird
Raised Fist0
R Programmingprogramming~30 mins

Apply functions on matrices in R Programming - Mini Project: Build & Apply

Choose your learning style10 modes available
Apply functions on matrices
📖 Scenario: You work in a small bakery that tracks daily sales of different types of bread in a matrix. Each row represents a day, and each column represents a bread type.You want to analyze the sales data by applying functions to the matrix rows and columns.
🎯 Goal: Build an R program that creates a sales matrix, sets a threshold for good sales, applies functions to calculate total sales per day and average sales per bread type, and prints the results.
📋 What You'll Learn
Create a matrix called sales with 3 rows and 4 columns using the exact values: 10, 15, 20, 25, 5, 10, 15, 20, 0, 5, 10, 15
Create a variable called good_sales_threshold and set it to 15
Use apply() to calculate total sales per day (sum of each row) and store it in total_sales_per_day
Use apply() to calculate average sales per bread type (mean of each column) and store it in average_sales_per_bread
Print total_sales_per_day and average_sales_per_bread
💡 Why This Matters
🌍 Real World
Analyzing sales data in a bakery or any small business helps understand daily performance and product popularity.
💼 Career
Data analysts and business managers often use matrix operations and apply functions to summarize and interpret data efficiently.
Progress0 / 4 steps
1
Create the sales matrix
Create a matrix called sales with 3 rows and 4 columns using these exact values in this order: 10, 15, 20, 25, 5, 10, 15, 20, 0, 5, 10, 15
R Programming
Hint

Use the matrix() function with byrow = TRUE to fill rows first.

2
Set the good sales threshold
Create a variable called good_sales_threshold and set it to 15
R Programming
Hint

Just assign the number 15 to the variable good_sales_threshold.

3
Calculate total sales per day and average sales per bread type
Use apply() on the sales matrix to calculate total sales per day (sum of each row) and store it in total_sales_per_day. Then use apply() to calculate average sales per bread type (mean of each column) and store it in average_sales_per_bread.
R Programming
Hint

Use apply(sales, 1, sum) for rows and apply(sales, 2, mean) for columns.

4
Print the results
Print the variables total_sales_per_day and average_sales_per_bread using two separate print() statements.
R Programming
Hint

Use print(total_sales_per_day) and print(average_sales_per_bread).

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