Chapter 31: R Matrices
Part 1: What is a Matrix?
A matrix is a two-dimensional rectangular data structure where all elements must be of the same type (all numbers, all characters, all logical values, etc.). It has rows and columns, and you can think of it as a vector arranged in a grid.
Key Characteristics of Matrices
-
Two-dimensional – Has both rows and columns
-
Homogeneous – All elements must be the same type
-
Rectangular – All rows have the same length, all columns have the same length
-
Indexed – Elements can be accessed by row and column positions
Part 2: Creating Matrices
Using matrix() Function
The most common way to create a matrix is with the matrix() function:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment"># Create a simple 3x3 matrix from a vector</span> mat1 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat1<span class="token punctuation">)</span> <span class="token comment"># Notice: by default, R fills by column (column-major order)</span> mat2 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> byrow <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">)</span> <span class="token comment"># Default</span> print<span class="token punctuation">(</span>mat2<span class="token punctuation">)</span> <span class="token comment"># Fill by row instead</span> mat3 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> byrow <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat3<span class="token punctuation">)</span> |
Output of mat1 (column-major):
|
0 1 2 3 4 5 6 7 8 9 |
[,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 |
Output of mat3 (row-major):
|
0 1 2 3 4 5 6 7 8 9 |
[,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 |
Creating from Vectors
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token comment"># Combine vectors as rows using rbind()</span> row1 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span> row2 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span> row3 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">)</span> mat_rows <span class="token operator"><-</span> rbind<span class="token punctuation">(</span>row1<span class="token punctuation">,</span> row2<span class="token punctuation">,</span> row3<span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat_rows<span class="token punctuation">)</span> <span class="token comment"># Combine vectors as columns using cbind()</span> col1 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">)</span> col2 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span> col3 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">)</span> mat_cols <span class="token operator"><-</span> cbind<span class="token punctuation">(</span>col1<span class="token punctuation">,</span> col2<span class="token punctuation">,</span> col3<span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat_cols<span class="token punctuation">)</span> |
Creating Special Matrices
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<span class="token comment"># Matrix of all zeros</span> zero_mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>zero_mat<span class="token punctuation">)</span> <span class="token comment"># Matrix of all ones</span> one_mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>one_mat<span class="token punctuation">)</span> <span class="token comment"># Identity matrix</span> identity_mat <span class="token operator"><-</span> diag<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span> <span class="token comment"># 4x4 identity matrix</span> print<span class="token punctuation">(</span>identity_mat<span class="token punctuation">)</span> <span class="token comment"># Diagonal matrix with custom values</span> diag_mat <span class="token operator"><-</span> diag<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">40</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>diag_mat<span class="token punctuation">)</span> <span class="token comment"># Random matrix</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> random_mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span>rnorm<span class="token punctuation">(</span><span class="token number">12</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token comment"># 3x4 matrix of random numbers</span> print<span class="token punctuation">(</span>random_mat<span class="token punctuation">)</span> |
Adding Row and Column Names
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token comment"># Create matrix with dimnames</span> mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span> c<span class="token punctuation">(</span><span class="token string">"Row1"</span><span class="token punctuation">,</span> <span class="token string">"Row2"</span><span class="token punctuation">,</span> <span class="token string">"Row3"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment"># Row names</span> c<span class="token punctuation">(</span><span class="token string">"Col1"</span><span class="token punctuation">,</span> <span class="token string">"Col2"</span><span class="token punctuation">,</span> <span class="token string">"Col3"</span><span class="token punctuation">)</span> <span class="token comment"># Column names</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Add names after creation</span> mat2 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> rownames<span class="token punctuation">(</span>mat2<span class="token punctuation">)</span> <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"A"</span><span class="token punctuation">,</span> <span class="token string">"B"</span><span class="token punctuation">,</span> <span class="token string">"C"</span><span class="token punctuation">)</span> colnames<span class="token punctuation">(</span>mat2<span class="token punctuation">)</span> <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"X"</span><span class="token punctuation">,</span> <span class="token string">"Y"</span><span class="token punctuation">,</span> <span class="token string">"Z"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat2<span class="token punctuation">)</span> <span class="token comment"># Get or set names</span> print<span class="token punctuation">(</span>rownames<span class="token punctuation">(</span>mat2<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>colnames<span class="token punctuation">(</span>mat2<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 3: Matrix Properties
Basic Information
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">12</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Dimensions</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 3 4</span> print<span class="token punctuation">(</span>nrow<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 3</span> print<span class="token punctuation">(</span>ncol<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 4</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 12 (total elements)</span> <span class="token comment"># Structure</span> str<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Class and type</span> print<span class="token punctuation">(</span>class<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "matrix" "array"</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "integer" (or "double" for numbers with decimals)</span> print<span class="token punctuation">(</span>mode<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "numeric"</span> <span class="token comment"># Summary</span> summary<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> |
Part 4: Accessing Matrix Elements
By Index Positions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">12</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">,</span> byrow <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Single element: matrix[ row , column ]</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Row 2, Column 3 - value 10</span> <span class="token comment"># Entire row</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Row 2, all columns - 5 6 7 8</span> <span class="token comment"># Entire column</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># All rows, Column 3 - 3 7 11</span> <span class="token comment"># Multiple rows and columns</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Rows 1-2, all columns</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token operator">:</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># All rows, Columns 2-4</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token operator">:</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Rows 1-2, Columns 2-3</span> <span class="token comment"># Specific combination</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Rows 1 and 3, Columns 1 and 4</span> |
By Row and Column Names
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
named_mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span> c<span class="token punctuation">(</span><span class="token string">"A"</span><span class="token punctuation">,</span> <span class="token string">"B"</span><span class="token punctuation">,</span> <span class="token string">"C"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> c<span class="token punctuation">(</span><span class="token string">"X"</span><span class="token punctuation">,</span> <span class="token string">"Y"</span><span class="token punctuation">,</span> <span class="token string">"Z"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>named_mat<span class="token punctuation">)</span> <span class="token comment"># Access by names</span> print<span class="token punctuation">(</span>named_mat<span class="token punctuation">[</span><span class="token string">"B"</span><span class="token punctuation">,</span> <span class="token string">"Y"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Row B, Column Y</span> print<span class="token punctuation">(</span>named_mat<span class="token punctuation">[</span><span class="token string">"A"</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Row A, all columns</span> print<span class="token punctuation">(</span>named_mat<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token string">"Z"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># All rows, Column Z</span> print<span class="token punctuation">(</span>named_mat<span class="token punctuation">[</span>c<span class="token punctuation">(</span><span class="token string">"A"</span><span class="token punctuation">,</span> <span class="token string">"C"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> c<span class="token punctuation">(</span><span class="token string">"X"</span><span class="token punctuation">,</span> <span class="token string">"Z"</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Specific combination</span> |
By Logical Conditions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">12</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Elements greater than 5</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span>mat <span class="token operator">></span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Returns a vector of elements meeting condition</span> <span class="token comment"># Which positions satisfy condition?</span> print<span class="token punctuation">(</span>which<span class="token punctuation">(</span>mat <span class="token operator">></span> <span class="token number">5</span><span class="token punctuation">,</span> arr.ind <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Returns row and column indices</span> <span class="token comment"># Replace elements based on condition</span> mat<span class="token punctuation">[</span>mat <span class="token percent-operator operator">%%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">0</span> <span class="token comment"># Set even numbers to 0</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> |
Part 5: Matrix Operations
Arithmetic Operations
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
mat1 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">4</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> mat2 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">5</span><span class="token operator">:</span><span class="token number">8</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Matrix 1:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat1<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Matrix 2:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat2<span class="token punctuation">)</span> <span class="token comment"># Element-wise operations</span> print<span class="token punctuation">(</span>mat1 <span class="token operator">+</span> mat2<span class="token punctuation">)</span> <span class="token comment"># Addition</span> print<span class="token punctuation">(</span>mat1 <span class="token operator">-</span> mat2<span class="token punctuation">)</span> <span class="token comment"># Subtraction</span> print<span class="token punctuation">(</span>mat1 <span class="token operator">*</span> mat2<span class="token punctuation">)</span> <span class="token comment"># Element-wise multiplication</span> print<span class="token punctuation">(</span>mat1 <span class="token operator">/</span> mat2<span class="token punctuation">)</span> <span class="token comment"># Element-wise division</span> print<span class="token punctuation">(</span>mat1<span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Square each element</span> <span class="token comment"># Scalar operations</span> print<span class="token punctuation">(</span>mat1 <span class="token operator">+</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token comment"># Add 10 to every element</span> print<span class="token punctuation">(</span>mat1 <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Multiply every element by 2</span> |
Matrix Multiplication
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<span class="token comment"># For true matrix multiplication, use %*%</span> mat_a <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">4</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> mat_b <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">5</span><span class="token operator">:</span><span class="token number">8</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Matrix A:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat_a<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Matrix B:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat_b<span class="token punctuation">)</span> <span class="token comment"># Matrix multiplication (not element-wise!)</span> mat_mult <span class="token operator"><-</span> mat_a <span class="token percent-operator operator">%*%</span> mat_b print<span class="token punctuation">(</span><span class="token string">"A %*% B:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat_mult<span class="token punctuation">)</span> <span class="token comment"># Compare with element-wise multiplication</span> print<span class="token punctuation">(</span><span class="token string">"A * B (element-wise):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat_a <span class="token operator">*</span> mat_b<span class="token punctuation">)</span> <span class="token comment"># Cross-product</span> t_mat_a <span class="token operator"><-</span> t<span class="token punctuation">(</span>mat_a<span class="token punctuation">)</span> <span class="token comment"># Transpose</span> cross_prod <span class="token operator"><-</span> t<span class="token punctuation">(</span>mat_a<span class="token punctuation">)</span> <span class="token percent-operator operator">%*%</span> mat_a <span class="token comment"># Same as crossprod(mat_a)</span> print<span class="token punctuation">(</span><span class="token string">"Cross product:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>cross_prod<span class="token punctuation">)</span> |
Matrix Functions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># Transpose</span> print<span class="token punctuation">(</span>t<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Determinant (for square matrices)</span> det_mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>det_mat<span class="token punctuation">)</span> print<span class="token punctuation">(</span>det<span class="token punctuation">(</span>det_mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Determinant: (4*8) - (6*3) = 32 - 18 = 14</span> <span class="token comment"># Inverse (for square matrices)</span> inv_mat <span class="token operator"><-</span> solve<span class="token punctuation">(</span>det_mat<span class="token punctuation">)</span> print<span class="token punctuation">(</span>inv_mat<span class="token punctuation">)</span> print<span class="token punctuation">(</span>inv_mat <span class="token percent-operator operator">%*%</span> det_mat<span class="token punctuation">)</span> <span class="token comment"># Should be identity matrix (approximately)</span> <span class="token comment"># Diagonal elements</span> print<span class="token punctuation">(</span>diag<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>diag<span class="token punctuation">(</span>diag<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Create diagonal matrix from vector</span> <span class="token comment"># Row and column sums</span> print<span class="token punctuation">(</span>rowSums<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>colSums<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>rowMeans<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>colMeans<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 6: Modifying Matrices
Changing Elements
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">12</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Original matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Change single element</span> mat<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">100</span> print<span class="token punctuation">(</span><span class="token string">"After changing element [2,3] to 100:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Change entire row</span> mat<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">51</span><span class="token punctuation">,</span> <span class="token number">52</span><span class="token punctuation">,</span> <span class="token number">53</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"After changing row 2:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Change entire column</span> mat<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">201</span><span class="token punctuation">,</span> <span class="token number">202</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"After changing column 3:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Change multiple elements</span> mat<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token operator">:</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator"><-</span> matrix<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"After changing submatrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> |
Adding Rows and Columns
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Original matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Add a new row</span> new_row <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">)</span> mat <span class="token operator"><-</span> rbind<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> new_row<span class="token punctuation">)</span> <span class="token comment"># rbind = row bind</span> print<span class="token punctuation">(</span><span class="token string">"After adding row:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Add a new column</span> new_col <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">13</span><span class="token punctuation">,</span> <span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">16</span><span class="token punctuation">)</span> <span class="token comment"># Note: 4 rows now</span> mat <span class="token operator"><-</span> cbind<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> new_col<span class="token punctuation">)</span> <span class="token comment"># cbind = column bind</span> print<span class="token punctuation">(</span><span class="token string">"After adding column:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Add multiple rows/columns at once</span> more_rows <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">17</span><span class="token operator">:</span><span class="token number">22</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> mat <span class="token operator"><-</span> rbind<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> more_rows<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"After adding two more rows:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> |
Removing Rows and Columns
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">20</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Original matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Remove second row</span> mat <span class="token operator"><-</span> mat<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">]</span> print<span class="token punctuation">(</span><span class="token string">"After removing row 2:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Remove third column</span> mat <span class="token operator"><-</span> mat<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span><span class="token string">"After removing column 3:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Remove multiple rows and columns</span> mat <span class="token operator"><-</span> mat<span class="token punctuation">[</span><span class="token operator">-</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token operator">-</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span><span class="token string">"After removing more:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> |
Combining Matrices
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
mat1 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">4</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> mat2 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">5</span><span class="token operator">:</span><span class="token number">8</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> mat3 <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">9</span><span class="token operator">:</span><span class="token number">12</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Combine horizontally (more columns)</span> horizontal <span class="token operator"><-</span> cbind<span class="token punctuation">(</span>mat1<span class="token punctuation">,</span> mat2<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Horizontal combination:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>horizontal<span class="token punctuation">)</span> <span class="token comment"># Combine vertically (more rows)</span> vertical <span class="token operator"><-</span> rbind<span class="token punctuation">(</span>mat1<span class="token punctuation">,</span> mat2<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Vertical combination:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>vertical<span class="token punctuation">)</span> <span class="token comment"># Combine both ways</span> combined <span class="token operator"><-</span> cbind<span class="token punctuation">(</span>rbind<span class="token punctuation">(</span>mat1<span class="token punctuation">,</span> mat2<span class="token punctuation">)</span><span class="token punctuation">,</span> mat3<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Complex combination:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>combined<span class="token punctuation">)</span> |
Part 7: Advanced Matrix Operations
Applying Functions to Rows/Columns
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">12</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Apply function to rows (MARGIN = 1)</span> row_means <span class="token operator"><-</span> apply<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Row means:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>row_means<span class="token punctuation">)</span> <span class="token comment"># Apply function to columns (MARGIN = 2)</span> col_means <span class="token operator"><-</span> apply<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Column means:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>col_means<span class="token punctuation">)</span> <span class="token comment"># Apply function to both</span> row_sds <span class="token operator"><-</span> apply<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> sd<span class="token punctuation">)</span> col_sds <span class="token operator"><-</span> apply<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> sd<span class="token punctuation">)</span> <span class="token comment"># Custom function</span> row_ranges <span class="token operator"><-</span> apply<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> max<span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">-</span> min<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Row ranges:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>row_ranges<span class="token punctuation">)</span> <span class="token comment"># Apply with multiple return values</span> row_stats <span class="token operator"><-</span> apply<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">{</span> c<span class="token punctuation">(</span>mean <span class="token operator">=</span> mean<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">,</span> sd <span class="token operator">=</span> sd<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">,</span> min <span class="token operator">=</span> min<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">,</span> max <span class="token operator">=</span> max<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Row statistics:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>row_stats<span class="token punctuation">)</span> |
Sweep Function
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">12</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Original matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Subtract column means from each column</span> col_means <span class="token operator"><-</span> colMeans<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> centered <span class="token operator"><-</span> sweep<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> col_means<span class="token punctuation">,</span> <span class="token string">"-"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Column-centered matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>centered<span class="token punctuation">)</span> <span class="token comment"># Verify column means are now 0</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>colMeans<span class="token punctuation">(</span>centered<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Divide by column standard deviations</span> col_sds <span class="token operator"><-</span> apply<span class="token punctuation">(</span>mat<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> sd<span class="token punctuation">)</span> scaled <span class="token operator"><-</span> sweep<span class="token punctuation">(</span>centered<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> col_sds<span class="token punctuation">,</span> <span class="token string">"/"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Scaled matrix (Z-scores):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>scaled<span class="token punctuation">)</span> <span class="token comment"># Verify: mean ≈ 0, sd ≈ 1</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>colMeans<span class="token punctuation">(</span>scaled<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>apply<span class="token punctuation">(</span>scaled<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> sd<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
Outer Product
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="token comment"># Outer product of two vectors</span> v1 <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">3</span> v2 <span class="token operator"><-</span> <span class="token number">4</span><span class="token operator">:</span><span class="token number">6</span> outer_product <span class="token operator"><-</span> v1 <span class="token percent-operator operator">%o%</span> v2 <span class="token comment"># or outer(v1, v2)</span> print<span class="token punctuation">(</span><span class="token string">"Outer product:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>outer_product<span class="token punctuation">)</span> <span class="token comment"># With custom function</span> outer_custom <span class="token operator"><-</span> outer<span class="token punctuation">(</span>v1<span class="token punctuation">,</span> v2<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">)</span> x<span class="token operator">^</span><span class="token number">2</span> <span class="token operator">+</span> y<span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Custom outer product:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>outer_custom<span class="token punctuation">)</span> |
Eigenvalues and Eigenvectors
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<span class="token comment"># Create a symmetric matrix</span> sym_mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Symmetric matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>sym_mat<span class="token punctuation">)</span> <span class="token comment"># Compute eigenvalues and eigenvectors</span> eigen_result <span class="token operator"><-</span> eigen<span class="token punctuation">(</span>sym_mat<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Eigenvalues:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>eigen_result<span class="token operator">$</span>values<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Eigenvectors:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>eigen_result<span class="token operator">$</span>vectors<span class="token punctuation">)</span> <span class="token comment"># Verify: A * v = λ * v</span> lambda <span class="token operator"><-</span> eigen_result<span class="token operator">$</span>values<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> v <span class="token operator"><-</span> eigen_result<span class="token operator">$</span>vectors<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span><span class="token string">"A * v:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>sym_mat <span class="token percent-operator operator">%*%</span> v<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"λ * v:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>lambda <span class="token operator">*</span> v<span class="token punctuation">)</span> |
Part 8: Practical Examples
Example 1: Grade Book
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<span class="token comment"># Create a grade book for students</span> students <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Alice"</span><span class="token punctuation">,</span> <span class="token string">"Bob"</span><span class="token punctuation">,</span> <span class="token string">"Charlie"</span><span class="token punctuation">,</span> <span class="token string">"Diana"</span><span class="token punctuation">)</span> subjects <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Math"</span><span class="token punctuation">,</span> <span class="token string">"Physics"</span><span class="token punctuation">,</span> <span class="token string">"Chemistry"</span><span class="token punctuation">,</span> <span class="token string">"Biology"</span><span class="token punctuation">,</span> <span class="token string">"English"</span><span class="token punctuation">)</span> <span class="token comment"># Generate random grades (0-100)</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> grades <span class="token operator"><-</span> matrix<span class="token punctuation">(</span> sample<span class="token punctuation">(</span><span class="token number">60</span><span class="token operator">:</span><span class="token number">100</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>students<span class="token punctuation">)</span> <span class="token operator">*</span> length<span class="token punctuation">(</span>subjects<span class="token punctuation">)</span><span class="token punctuation">,</span> replace <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> length<span class="token punctuation">(</span>students<span class="token punctuation">)</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> length<span class="token punctuation">(</span>subjects<span class="token punctuation">)</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span>students<span class="token punctuation">,</span> subjects<span class="token punctuation">)</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Grade Book:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>grades<span class="token punctuation">)</span> <span class="token comment"># Student statistics (by row)</span> student_stats <span class="token operator"><-</span> cbind<span class="token punctuation">(</span> Mean <span class="token operator">=</span> round<span class="token punctuation">(</span>rowMeans<span class="token punctuation">(</span>grades<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Median <span class="token operator">=</span> apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> median<span class="token punctuation">)</span><span class="token punctuation">,</span> SD <span class="token operator">=</span> round<span class="token punctuation">(</span>apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> sd<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Min <span class="token operator">=</span> apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> min<span class="token punctuation">)</span><span class="token punctuation">,</span> Max <span class="token operator">=</span> apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> max<span class="token punctuation">)</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Student Statistics:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>student_stats<span class="token punctuation">)</span> <span class="token comment"># Subject statistics (by column)</span> subject_stats <span class="token operator"><-</span> rbind<span class="token punctuation">(</span> Mean <span class="token operator">=</span> round<span class="token punctuation">(</span>colMeans<span class="token punctuation">(</span>grades<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Median <span class="token operator">=</span> apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> median<span class="token punctuation">)</span><span class="token punctuation">,</span> SD <span class="token operator">=</span> round<span class="token punctuation">(</span>apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> sd<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Min <span class="token operator">=</span> apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> min<span class="token punctuation">)</span><span class="token punctuation">,</span> Max <span class="token operator">=</span> apply<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> max<span class="token punctuation">)</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Subject Statistics:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>subject_stats<span class="token punctuation">)</span> <span class="token comment"># Find top student</span> student_averages <span class="token operator"><-</span> rowMeans<span class="token punctuation">(</span>grades<span class="token punctuation">)</span> top_student <span class="token operator"><-</span> names<span class="token punctuation">(</span>which.max<span class="token punctuation">(</span>student_averages<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>paste<span class="token punctuation">(</span><span class="token string">"Top student:"</span><span class="token punctuation">,</span> top_student<span class="token punctuation">,</span> <span class="token string">"with average"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>max<span class="token punctuation">(</span>student_averages<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Grade distribution</span> hist<span class="token punctuation">(</span>grades<span class="token punctuation">,</span> main <span class="token operator">=</span> <span class="token string">"Grade Distribution"</span><span class="token punctuation">,</span> xlab <span class="token operator">=</span> <span class="token string">"Scores"</span><span class="token punctuation">)</span> |
Example 2: Image Processing (Simplified)
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
<span class="token comment"># Create a simple grayscale image as a matrix</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> height <span class="token operator"><-</span> <span class="token number">10</span> width <span class="token operator"><-</span> <span class="token number">15</span> <span class="token comment"># Create random pixel values (0-255)</span> image <span class="token operator"><-</span> matrix<span class="token punctuation">(</span> sample<span class="token punctuation">(</span><span class="token number">0</span><span class="token operator">:</span><span class="token number">255</span><span class="token punctuation">,</span> height <span class="token operator">*</span> width<span class="token punctuation">,</span> replace <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> height<span class="token punctuation">,</span> ncol <span class="token operator">=</span> width <span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Original image (first 5 rows):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>image<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">8</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Image transformations</span> <span class="token comment"># 1. Brightness adjustment (add constant)</span> bright_image <span class="token operator"><-</span> image <span class="token operator">+</span> <span class="token number">50</span> bright_image<span class="token punctuation">[</span>bright_image <span class="token operator">></span> <span class="token number">255</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">255</span> <span class="token comment"># Clip to valid range</span> <span class="token comment"># 2. Contrast adjustment (multiply)</span> contrast_image <span class="token operator"><-</span> image <span class="token operator">*</span> <span class="token number">1.5</span> contrast_image<span class="token punctuation">[</span>contrast_image <span class="token operator">></span> <span class="token number">255</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">255</span> <span class="token comment"># 3. Negative (invert)</span> negative_image <span class="token operator"><-</span> <span class="token number">255</span> <span class="token operator">-</span> image <span class="token comment"># 4. Threshold (black and white)</span> threshold <span class="token operator"><-</span> <span class="token number">128</span> binary_image <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> height<span class="token punctuation">,</span> ncol <span class="token operator">=</span> width<span class="token punctuation">)</span> binary_image<span class="token punctuation">[</span>image <span class="token operator">></span> threshold<span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">1</span> <span class="token comment"># 5. Smoothing (simple 3x3 average)</span> smooth_image <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> height<span class="token punctuation">,</span> ncol <span class="token operator">=</span> width<span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> <span class="token number">2</span><span class="token operator">:</span><span class="token punctuation">(</span>height<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>j <span class="token keyword">in</span> <span class="token number">2</span><span class="token operator">:</span><span class="token punctuation">(</span>width<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> smooth_image<span class="token punctuation">[</span>i<span class="token punctuation">,</span> j<span class="token punctuation">]</span> <span class="token operator"><-</span> mean<span class="token punctuation">(</span>image<span class="token punctuation">[</span><span class="token punctuation">(</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">:</span><span class="token punctuation">(</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>j<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">:</span><span class="token punctuation">(</span>j<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment"># Display statistics</span> cat<span class="token punctuation">(</span><span class="token string">"Image Statistics:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Original - Mean:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"SD:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>sd<span class="token punctuation">(</span>image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Bright - Mean:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>bright_image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"SD:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>sd<span class="token punctuation">(</span>bright_image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Contrast - Mean:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>contrast_image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"SD:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>sd<span class="token punctuation">(</span>contrast_image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Negative - Mean:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>negative_image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"SD:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>sd<span class="token punctuation">(</span>negative_image<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> |
Example 3: Correlation Matrix
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<span class="token comment"># Create sample data</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> n <span class="token operator"><-</span> <span class="token number">100</span> <span class="token comment"># Generate correlated data</span> x1 <span class="token operator"><-</span> rnorm<span class="token punctuation">(</span>n<span class="token punctuation">)</span> x2 <span class="token operator"><-</span> <span class="token number">0.7</span> <span class="token operator">*</span> x1 <span class="token operator">+</span> <span class="token number">0.3</span> <span class="token operator">*</span> rnorm<span class="token punctuation">(</span>n<span class="token punctuation">)</span> x3 <span class="token operator"><-</span> <span class="token operator">-</span><span class="token number">0.5</span> <span class="token operator">*</span> x1 <span class="token operator">+</span> <span class="token number">0.8</span> <span class="token operator">*</span> rnorm<span class="token punctuation">(</span>n<span class="token punctuation">)</span> x4 <span class="token operator"><-</span> <span class="token number">0.3</span> <span class="token operator">*</span> x2 <span class="token operator">+</span> <span class="token number">0.7</span> <span class="token operator">*</span> rnorm<span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token comment"># Combine into matrix</span> data_matrix <span class="token operator"><-</span> cbind<span class="token punctuation">(</span>x1<span class="token punctuation">,</span> x2<span class="token punctuation">,</span> x3<span class="token punctuation">,</span> x4<span class="token punctuation">)</span> colnames<span class="token punctuation">(</span>data_matrix<span class="token punctuation">)</span> <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Height"</span><span class="token punctuation">,</span> <span class="token string">"Weight"</span><span class="token punctuation">,</span> <span class="token string">"Age"</span><span class="token punctuation">,</span> <span class="token string">"Score"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"First few rows of data:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>head<span class="token punctuation">(</span>data_matrix<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Calculate correlation matrix</span> cor_matrix <span class="token operator"><-</span> cor<span class="token punctuation">(</span>data_matrix<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Correlation Matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>cor_matrix<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Visualize correlation matrix</span> library<span class="token punctuation">(</span>corrplot<span class="token punctuation">)</span> corrplot<span class="token punctuation">(</span>cor_matrix<span class="token punctuation">,</span> method <span class="token operator">=</span> <span class="token string">"color"</span><span class="token punctuation">,</span> type <span class="token operator">=</span> <span class="token string">"upper"</span><span class="token punctuation">,</span> tl.col <span class="token operator">=</span> <span class="token string">"black"</span><span class="token punctuation">,</span> tl.srt <span class="token operator">=</span> <span class="token number">45</span><span class="token punctuation">)</span> <span class="token comment"># Find highly correlated pairs</span> high_cor <span class="token operator"><-</span> which<span class="token punctuation">(</span>abs<span class="token punctuation">(</span>cor_matrix<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0.5</span> <span class="token operator">&</span> abs<span class="token punctuation">(</span>cor_matrix<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">1</span><span class="token punctuation">,</span> arr.ind <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Highly correlated pairs:"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>nrow<span class="token punctuation">(</span>high_cor<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> r <span class="token operator"><-</span> high_cor<span class="token punctuation">[</span>i<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span> c <span class="token operator"><-</span> high_cor<span class="token punctuation">[</span>i<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>r <span class="token operator"><</span> c<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Print each pair once</span> cat<span class="token punctuation">(</span><span class="token string">" "</span><span class="token punctuation">,</span> colnames<span class="token punctuation">(</span>data_matrix<span class="token punctuation">)</span><span class="token punctuation">[</span>r<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"-"</span><span class="token punctuation">,</span> colnames<span class="token punctuation">(</span>data_matrix<span class="token punctuation">)</span><span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">":"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>cor_matrix<span class="token punctuation">[</span>r<span class="token punctuation">,</span> c<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Example 4: Linear Regression from Scratch
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<span class="token comment"># Generate sample data</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> n <span class="token operator"><-</span> <span class="token number">50</span> x <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span>n true_slope <span class="token operator"><-</span> <span class="token number">2.5</span> true_intercept <span class="token operator"><-</span> <span class="token number">10</span> y <span class="token operator"><-</span> true_intercept <span class="token operator">+</span> true_slope <span class="token operator">*</span> x <span class="token operator">+</span> rnorm<span class="token punctuation">(</span>n<span class="token punctuation">,</span> sd <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token comment"># Create design matrix X (with column of 1s for intercept)</span> X <span class="token operator"><-</span> cbind<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> x<span class="token punctuation">)</span> <span class="token comment"># First column is 1s, second column is x</span> print<span class="token punctuation">(</span><span class="token string">"Design matrix (first 5 rows):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>head<span class="token punctuation">(</span>X<span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Calculate coefficients: β = (X'X)^(-1) X'y</span> XtX <span class="token operator"><-</span> t<span class="token punctuation">(</span>X<span class="token punctuation">)</span> <span class="token percent-operator operator">%*%</span> X Xty <span class="token operator"><-</span> t<span class="token punctuation">(</span>X<span class="token punctuation">)</span> <span class="token percent-operator operator">%*%</span> y XtX_inv <span class="token operator"><-</span> solve<span class="token punctuation">(</span>XtX<span class="token punctuation">)</span> beta <span class="token operator"><-</span> XtX_inv <span class="token percent-operator operator">%*%</span> Xty intercept <span class="token operator"><-</span> beta<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span> slope <span class="token operator"><-</span> beta<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"Calculated coefficients:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Intercept:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>intercept<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"(true:"</span><span class="token punctuation">,</span> true_intercept<span class="token punctuation">,</span> <span class="token string">")\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Slope:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>slope<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"(true:"</span><span class="token punctuation">,</span> true_slope<span class="token punctuation">,</span> <span class="token string">")\n"</span><span class="token punctuation">)</span> <span class="token comment"># Calculate fitted values</span> y_hat <span class="token operator"><-</span> X <span class="token percent-operator operator">%*%</span> beta <span class="token comment"># Calculate residuals</span> residuals <span class="token operator"><-</span> y <span class="token operator">-</span> y_hat <span class="token comment"># Calculate R-squared</span> SS_res <span class="token operator"><-</span> sum<span class="token punctuation">(</span>residuals<span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> SS_tot <span class="token operator"><-</span> sum<span class="token punctuation">(</span><span class="token punctuation">(</span>y <span class="token operator">-</span> mean<span class="token punctuation">(</span>y<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> R_squared <span class="token operator"><-</span> <span class="token number">1</span> <span class="token operator">-</span> SS_res <span class="token operator">/</span> SS_tot cat<span class="token punctuation">(</span><span class="token string">"R-squared:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>R_squared<span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># Calculate standard errors</span> n <span class="token operator"><-</span> length<span class="token punctuation">(</span>y<span class="token punctuation">)</span> p <span class="token operator"><-</span> <span class="token number">2</span> <span class="token comment"># number of parameters</span> sigma_squared <span class="token operator"><-</span> SS_res <span class="token operator">/</span> <span class="token punctuation">(</span>n <span class="token operator">-</span> p<span class="token punctuation">)</span> var_beta <span class="token operator"><-</span> sigma_squared <span class="token operator">*</span> XtX_inv se_beta <span class="token operator"><-</span> sqrt<span class="token punctuation">(</span>diag<span class="token punctuation">(</span>var_beta<span class="token punctuation">)</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Standard errors:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Intercept SE:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>se_beta<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Slope SE:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>se_beta<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># t-statistics</span> t_stats <span class="token operator"><-</span> beta <span class="token operator">/</span> se_beta cat<span class="token punctuation">(</span><span class="token string">"t-statistics:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Intercept t:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>t_stats<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Slope t:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>t_stats<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># Compare with R's built-in lm</span> lm_fit <span class="token operator"><-</span> lm<span class="token punctuation">(</span>y <span class="token operator">~</span> x<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"\nComparison with lm():\n"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>coef<span class="token punctuation">(</span>lm_fit<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>summary<span class="token punctuation">(</span>lm_fit<span class="token punctuation">)</span><span class="token operator">$</span>coefficients<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token string">"Std. Error"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> |
Part 9: Matrix vs Data Frame
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<span class="token comment"># Matrix - homogeneous</span> mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">6</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Matrix:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Structure:"</span><span class="token punctuation">)</span> str<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Data frame - can be heterogeneous</span> df <span class="token operator"><-</span> data.frame<span class="token punctuation">(</span> A <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">2</span><span class="token punctuation">,</span> B <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"x"</span><span class="token punctuation">,</span> <span class="token string">"y"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> C <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">FALSE</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Data frame:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>df<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Structure:"</span><span class="token punctuation">)</span> str<span class="token punctuation">(</span>df<span class="token punctuation">)</span> <span class="token comment"># When to use each</span> cat<span class="token punctuation">(</span><span class="token string">"\nMatrix operations are faster:\n"</span><span class="token punctuation">)</span> n <span class="token operator"><-</span> <span class="token number">1000</span> mat_big <span class="token operator"><-</span> matrix<span class="token punctuation">(</span>rnorm<span class="token punctuation">(</span>n<span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> n<span class="token punctuation">)</span> df_big <span class="token operator"><-</span> as.data.frame<span class="token punctuation">(</span>mat_big<span class="token punctuation">)</span> time_mat <span class="token operator"><-</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result <span class="token operator"><-</span> mat_big <span class="token percent-operator operator">%*%</span> t<span class="token punctuation">(</span>mat_big<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> time_df <span class="token operator"><-</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result <span class="token operator"><-</span> as.matrix<span class="token punctuation">(</span>df_big<span class="token punctuation">)</span> <span class="token percent-operator operator">%*%</span> t<span class="token punctuation">(</span>as.matrix<span class="token punctuation">(</span>df_big<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Matrix time:"</span><span class="token punctuation">,</span> time_mat<span class="token punctuation">[</span><span class="token string">"elapsed"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Data frame conversion + multiplication time:"</span><span class="token punctuation">,</span> time_df<span class="token punctuation">[</span><span class="token string">"elapsed"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> |
Part 10: Common Mistakes and How to Avoid Them
Mistake 1: Confusing Matrix Multiplication with Element-wise Multiplication
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
A <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">4</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> B <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">5</span><span class="token operator">:</span><span class="token number">8</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># ❌ Using * when you want matrix multiplication</span> wrong <span class="token operator"><-</span> A <span class="token operator">*</span> B <span class="token comment"># Element-wise multiplication</span> <span class="token comment"># ✅ Use %*% for matrix multiplication</span> correct <span class="token operator"><-</span> A <span class="token percent-operator operator">%*%</span> B print<span class="token punctuation">(</span><span class="token string">"Element-wise product (probably not what you want):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>wrong<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Matrix product:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>correct<span class="token punctuation">)</span> |
Mistake 2: Forgetting that Matrices are Column-Major
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment"># ❌ Assuming matrix fills by row</span> mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Column-major (default):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token comment"># Fills down columns first</span> <span class="token comment"># ✅ Specify byrow = TRUE for row-major</span> mat_row <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> byrow <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Row-major:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat_row<span class="token punctuation">)</span> |
Mistake 3: Indexing Out of Bounds
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># ❌ This will cause an error</span> <span class="token comment"># mat[4, 1] # Error: subscript out of bounds</span> <span class="token comment"># ✅ Check dimensions first</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token number">4</span> <span class="token operator"><=</span> nrow<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token number">1</span> <span class="token operator"><=</span> ncol<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> print<span class="token punctuation">(</span><span class="token string">"Index out of bounds"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Mistake 4: Not Preserving Matrix Structure
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
mat <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># ❌ This returns a vector, not a matrix</span> row_vec <span class="token operator"><-</span> mat<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token comment"># Returns a vector</span> print<span class="token punctuation">(</span>class<span class="token punctuation">(</span>row_vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># ✅ Use drop = FALSE to preserve matrix structure</span> row_mat <span class="token operator"><-</span> mat<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> drop <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>class<span class="token punctuation">(</span>row_mat<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>row_mat<span class="token punctuation">)</span> <span class="token comment"># Similarly for columns</span> col_vec <span class="token operator"><-</span> mat<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span> col_mat <span class="token operator"><-</span> mat<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> drop <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">]</span> |
Mistake 5: Incompatible Dimensions for Operations
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
A <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">6</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># 2x3</span> B <span class="token operator"><-</span> matrix<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">4</span><span class="token punctuation">,</span> nrow <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># 2x2</span> <span class="token comment"># ❌ This will cause an error</span> <span class="token comment"># C <- A %*% B # Error: non-conformable arguments</span> <span class="token comment"># ✅ Check dimensions before operation</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>ncol<span class="token punctuation">(</span>A<span class="token punctuation">)</span> <span class="token operator">==</span> nrow<span class="token punctuation">(</span>B<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> C <span class="token operator"><-</span> A <span class="token percent-operator operator">%*%</span> B <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> cat<span class="token punctuation">(</span><span class="token string">"Cannot multiply:"</span><span class="token punctuation">,</span> ncol<span class="token punctuation">(</span>A<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"columns vs"</span><span class="token punctuation">,</span> nrow<span class="token punctuation">(</span>B<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"rows\n"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Summary: The Matrix Philosophy
Matrices are your go-to structure for numerical computing in R. Master these concepts:
Creating matrices:
-
matrix()with nrow and ncol -
rbind()andcbind()for combining vectors -
Special matrices:
diag(),matrix(0,),matrix(1,)
Accessing elements:
-
[row, col]notation -
Row names and column names for readability
-
Logical indexing for conditions
Matrix operations:
-
Element-wise:
+,-,*,/ -
Matrix multiplication:
%*% -
Transpose:
t() -
Inverse:
solve() -
Determinant:
det() -
Eigendecomposition:
eigen()
Key functions:
-
dim(),nrow(),ncol() -
rowSums(),colSums(),rowMeans(),colMeans() -
apply()for custom operations -
sweep()for broadcasting
Best practices:
-
Use
byrow = TRUEwhen you want row-major order -
Use
drop = FALSEto preserve matrix structure -
Check dimensions before matrix multiplication
-
Remember that matrices are homogeneous
-
Use matrices for numerical computations, data frames for mixed data
Matrices are the foundation of numerical computing in R. They’re efficient, powerful, and essential for everything from simple statistics to complex machine learning algorithms. Master matrices, and you’ll have a solid foundation for advanced R programming!
Would you like me to elaborate on any specific aspect of matrices or explore more advanced matrix operations?
