Chapter 32: R Arrays
Part 1: What is an Array?
An array is a multi-dimensional data structure where all elements must be of the same type (like matrices). It’s essentially a generalization of matrices to any number of dimensions.
Key Characteristics of Arrays
-
Multi-dimensional – Can have 1, 2, 3, or more dimensions
-
Homogeneous – All elements must be the same type
-
Rectangular – All dimensions have fixed sizes
-
Indexed – Elements accessed by indices in each dimension
Part 2: Creating Arrays
Using array() Function
The primary way to create arrays is with the array() function:
|
0 1 2 3 4 5 6 7 8 |
<span class="token comment"># Create a simple 3D array (2 rows, 3 columns, 4 layers)</span> arr1 <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr1<span class="token punctuation">)</span> |
Let’s break down what this means:
-
dim = c(2, 3, 4)means:-
Dimension 1: 2 rows
-
Dimension 2: 3 columns
-
Dimension 3: 4 layers (or “slices”)
-
-
Total elements: 2 × 3 × 4 = 24
Visualizing the Array
To better understand, let’s look at each layer separately:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment"># Create a smaller array to see clearly</span> arr_small <span class="token operator"><-</span> array<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> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr_small<span class="token punctuation">)</span> <span class="token comment"># We can access each layer</span> cat<span class="token punctuation">(</span><span class="token string">"Layer 1:\n"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr_small<span class="token punctuation">[</span><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> cat<span class="token punctuation">(</span><span class="token string">"\nLayer 2:\n"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr_small<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span> |
Arrays with Named Dimensions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token comment"># Create array with dimension names</span> dim_names <span class="token operator"><-</span> list<span class="token punctuation">(</span> Row <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"R1"</span><span class="token punctuation">,</span> <span class="token string">"R2"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Col <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"C1"</span><span class="token punctuation">,</span> <span class="token string">"C2"</span><span class="token punctuation">,</span> <span class="token string">"C3"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Layer <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"L1"</span><span class="token punctuation">,</span> <span class="token string">"L2"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> arr_named <span class="token operator"><-</span> array<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> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> dim_names <span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr_named<span class="token punctuation">)</span> <span class="token comment"># Check dimension names</span> print<span class="token punctuation">(</span>dimnames<span class="token punctuation">(</span>arr_named<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Creating from Vectors
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment"># Start with a vector and give it dimensions</span> vec <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span> dim<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> <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">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Reshape into 3x4x2 array</span> print<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> class<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> <span class="token comment"># Now it's an array!</span> <span class="token comment"># This is equivalent to:</span> arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 3: Array 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 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># Dimensions</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 3 4</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 24 (total elements)</span> print<span class="token punctuation">(</span>nrow<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 (first dimension)</span> print<span class="token punctuation">(</span>ncol<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 3 (second dimension)</span> <span class="token comment"># For higher dimensions, use dim()</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr<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"># 4 (third dimension)</span> <span class="token comment"># Structure</span> str<span class="token punctuation">(</span>arr<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>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "array" </span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "integer"</span> print<span class="token punctuation">(</span>mode<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "numeric"</span> |
Dimension Names
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment"># Check if dimensions have names</span> print<span class="token punctuation">(</span>dimnames<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># NULL if no names</span> <span class="token comment"># Add names after creation</span> dimnames<span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token operator"><-</span> list<span class="token punctuation">(</span> paste0<span class="token punctuation">(</span><span class="token string">"Row"</span><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> paste0<span class="token punctuation">(</span><span class="token string">"Col"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> paste0<span class="token punctuation">(</span><span class="token string">"Layer"</span><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> <span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr<span class="token punctuation">)</span> |
Part 4: Accessing Array 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 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Access single element: array[row, col, layer]</span> print<span class="token punctuation">(</span>arr<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> <span class="token comment"># Row 2, Col 3, Layer 4</span> <span class="token comment"># Access entire slice</span> print<span class="token punctuation">(</span>arr<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 punctuation">)</span> <span class="token comment"># All columns and layers for row 1</span> print<span class="token punctuation">(</span>arr<span class="token punctuation">[</span><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"># All rows and layers for column 2</span> print<span class="token punctuation">(</span>arr<span class="token punctuation">[</span><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 and columns for layer 3 (returns a matrix)</span> <span class="token comment"># Multiple indices</span> print<span class="token punctuation">(</span>arr<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 number">3</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"># Rows 1-2, Cols 2-3, Layers 3-4</span> <span class="token comment"># Specific combination</span> print<span class="token punctuation">(</span>arr<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 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">2</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> |
By Dimension 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 array with names</span> arr_named <span class="token operator"><-</span> array<span class="token punctuation">(</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span> Rows <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 punctuation">,</span> Cols <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><span class="token punctuation">,</span> Layers <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"L1"</span><span class="token punctuation">,</span> <span class="token string">"L2"</span><span class="token punctuation">,</span> <span class="token string">"L3"</span><span class="token punctuation">,</span> <span class="token string">"L4"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr_named<span class="token punctuation">)</span> <span class="token comment"># Access by names</span> print<span class="token punctuation">(</span>arr_named<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 string">"L3"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Single element</span> print<span class="token punctuation">(</span>arr_named<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 punctuation">)</span> <span class="token comment"># All columns and layers for row A</span> print<span class="token punctuation">(</span>arr_named<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 punctuation">)</span> <span class="token comment"># All rows and layers for column Z</span> print<span class="token punctuation">(</span>arr_named<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token string">"L2"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># All rows and columns for layer L2</span> |
By Logical Conditions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># Elements greater than 15</span> print<span class="token punctuation">(</span>arr<span class="token punctuation">[</span>arr <span class="token operator">></span> <span class="token number">15</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Find positions where condition is true</span> positions <span class="token operator"><-</span> which<span class="token punctuation">(</span>arr <span class="token operator">></span> <span class="token number">15</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>positions<span class="token punctuation">)</span> print<span class="token punctuation">(</span>positions<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"># First element's coordinates</span> <span class="token comment"># Count elements meeting condition</span> print<span class="token punctuation">(</span>sum<span class="token punctuation">(</span>arr <span class="token operator">></span> <span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Replace elements based on condition</span> arr_copy <span class="token operator"><-</span> arr arr_copy<span class="token punctuation">[</span>arr_copy <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>arr_copy<span class="token punctuation">)</span> |
Part 5: Manipulating Arrays
Applying Functions Across Dimensions
|
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 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># Apply mean across all dimensions (collapses everything)</span> print<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Apply mean across specific dimensions using apply()</span> <span class="token comment"># Mean across layers (for each row-col combination)</span> <span class="token comment"># Result is 2x3 matrix</span> layer_means <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<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 punctuation">,</span> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Means across layers (2x3):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>layer_means<span class="token punctuation">)</span> <span class="token comment"># Mean across rows (for each col-layer combination)</span> <span class="token comment"># Result is 3x4 matrix</span> row_means <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> c<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> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Means across rows (3x4):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>row_means<span class="token punctuation">)</span> <span class="token comment"># Mean across columns (for each row-layer combination)</span> <span class="token comment"># Result is 2x4 matrix</span> col_means <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<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> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Means across columns (2x4):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>col_means<span class="token punctuation">)</span> <span class="token comment"># Custom function</span> row_sds <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> c<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> sd<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Standard deviations across rows:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>row_sds<span class="token punctuation">)</span> |
Adding and Removing Dimensions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token comment"># Start with a 2D matrix</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">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"># Add a dimension (makes it a 3D array with one layer)</span> dim<span class="token punctuation">(</span>mat<span class="token punctuation">)</span> <span class="token operator"><-</span> c<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 number">1</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"After adding dimension:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mat<span class="token punctuation">)</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 1</span> <span class="token comment"># Remove a dimension (if it's size 1)</span> arr <span class="token operator"><-</span> array<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> dim <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">4</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> arr_squeezed <span class="token operator"><-</span> drop<span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token comment"># Removes dimensions of size 1</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr_squeezed<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 3 4 (now a matrix)</span> |
Combining Arrays
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<span class="token comment"># Create two arrays</span> arr1 <span class="token operator"><-</span> array<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> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> arr2 <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">13</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</span><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"># Combine along first dimension (stack rows)</span> combined_rows <span class="token operator"><-</span> abind<span class="token operator">::</span>abind<span class="token punctuation">(</span>arr1<span class="token punctuation">,</span> arr2<span class="token punctuation">,</span> along <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># Need library(abind) or use rbind for 2D</span> <span class="token comment"># For 3D, we can use abind package</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>require<span class="token punctuation">(</span>abind<span class="token punctuation">,</span> quietly <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Combine along third dimension (add more layers)</span> combined_layers <span class="token operator"><-</span> abind<span class="token punctuation">(</span>arr1<span class="token punctuation">,</span> arr2<span class="token punctuation">,</span> along <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>combined_layers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 3 4</span> <span class="token comment"># Combine along new dimension</span> combined_new <span class="token operator"><-</span> abind<span class="token punctuation">(</span>arr1<span class="token punctuation">,</span> arr2<span class="token punctuation">,</span> along <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>combined_new<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 3 2 2</span> <span class="token punctuation">}</span> |
Part 6: Practical Examples
Example 1: Weather Data Analysis
|
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 68 69 70 71 72 73 74 |
<span class="token comment"># Create a 3D array for weather data</span> <span class="token comment"># Dimensions: [city, month, year]</span> cities <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"New York"</span><span class="token punctuation">,</span> <span class="token string">"Los Angeles"</span><span class="token punctuation">,</span> <span class="token string">"Chicago"</span><span class="token punctuation">,</span> <span class="token string">"Houston"</span><span class="token punctuation">)</span> months <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Jan"</span><span class="token punctuation">,</span> <span class="token string">"Feb"</span><span class="token punctuation">,</span> <span class="token string">"Mar"</span><span class="token punctuation">,</span> <span class="token string">"Apr"</span><span class="token punctuation">,</span> <span class="token string">"May"</span><span class="token punctuation">,</span> <span class="token string">"Jun"</span><span class="token punctuation">,</span> <span class="token string">"Jul"</span><span class="token punctuation">,</span> <span class="token string">"Aug"</span><span class="token punctuation">,</span> <span class="token string">"Sep"</span><span class="token punctuation">,</span> <span class="token string">"Oct"</span><span class="token punctuation">,</span> <span class="token string">"Nov"</span><span class="token punctuation">,</span> <span class="token string">"Dec"</span><span class="token punctuation">)</span> years <span class="token operator"><-</span> <span class="token number">2020</span><span class="token operator">:</span><span class="token number">2023</span> <span class="token comment"># Generate temperature data (in Celsius)</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> n_cities <span class="token operator"><-</span> length<span class="token punctuation">(</span>cities<span class="token punctuation">)</span> n_months <span class="token operator"><-</span> length<span class="token punctuation">(</span>months<span class="token punctuation">)</span> n_years <span class="token operator"><-</span> length<span class="token punctuation">(</span>years<span class="token punctuation">)</span> <span class="token comment"># Create seasonal pattern</span> month_effects <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">24</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Base temperatures for each city</span> city_base <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">18</span><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 comment"># Average temps</span> <span class="token comment"># Generate array</span> temps <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> dim <span class="token operator">=</span> c<span class="token punctuation">(</span>n_cities<span class="token punctuation">,</span> n_months<span class="token punctuation">,</span> n_years<span class="token punctuation">)</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span>cities<span class="token punctuation">,</span> months<span class="token punctuation">,</span> years<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>city <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>n_cities<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>year <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>n_years<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Add random variation</span> temps<span class="token punctuation">[</span>city<span class="token punctuation">,</span> <span class="token punctuation">,</span> year<span class="token punctuation">]</span> <span class="token operator"><-</span> city_base<span class="token punctuation">[</span>city<span class="token punctuation">]</span> <span class="token operator">+</span> month_effects <span class="token operator">+</span> rnorm<span class="token punctuation">(</span>n_months<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>year <span class="token operator">-</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.5</span> <span class="token comment"># Warming trend</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> print<span class="token punctuation">(</span><span class="token string">"Temperature data shape:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>temps<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"First few entries for New York, 2020:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>temps<span class="token punctuation">[</span><span class="token string">"New York"</span><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> <span class="token string">"2020"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 1: Average temperature by city across all years</span> city_avg <span class="token operator"><-</span> apply<span class="token punctuation">(</span>temps<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">"Average temperature by city:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>city_avg<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 2: Average temperature by month across all cities and years</span> month_avg <span class="token operator"><-</span> apply<span class="token punctuation">(</span>temps<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">"Average temperature by month:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>month_avg<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 3: Yearly averages</span> year_avg <span class="token operator"><-</span> apply<span class="token punctuation">(</span>temps<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Average temperature by year:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>year_avg<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 4: City-specific yearly trends</span> city_year_avg <span class="token operator"><-</span> apply<span class="token punctuation">(</span>temps<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> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"City averages by year:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>city_year_avg<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 5: Find warmest and coldest months for each city</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>city <span class="token keyword">in</span> cities<span class="token punctuation">)</span> <span class="token punctuation">{</span> city_data <span class="token operator"><-</span> temps<span class="token punctuation">[</span>city<span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> warmest <span class="token operator"><-</span> which<span class="token punctuation">(</span>city_data <span class="token operator">==</span> max<span class="token punctuation">(</span>city_data<span class="token punctuation">)</span><span class="token punctuation">,</span> arr.ind <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> coldest <span class="token operator"><-</span> which<span class="token punctuation">(</span>city_data <span class="token operator">==</span> min<span class="token punctuation">(</span>city_data<span class="token punctuation">)</span><span class="token punctuation">,</span> arr.ind <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">,</span> city<span class="token punctuation">,</span> <span class="token string">":\n"</span><span class="token punctuation">,</span> sep<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Warmest: "</span><span class="token punctuation">,</span> months<span class="token punctuation">[</span>warmest<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 string">" "</span><span class="token punctuation">,</span> years<span class="token punctuation">[</span>warmest<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 string">" ("</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>city_data<span class="token punctuation">[</span>warmest<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">"°C)\n"</span><span class="token punctuation">,</span> sep<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Coldest: "</span><span class="token punctuation">,</span> months<span class="token punctuation">[</span>coldest<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 string">" "</span><span class="token punctuation">,</span> years<span class="token punctuation">[</span>coldest<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 string">" ("</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>city_data<span class="token punctuation">[</span>coldest<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">"°C)\n"</span><span class="token punctuation">,</span> sep<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Example 2: Image Data (RGB)
|
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 |
<span class="token comment"># Create a simple RGB image representation</span> <span class="token comment"># Dimensions: [height, width, channel] where channel = R, G, B</span> height <span class="token operator"><-</span> <span class="token number">5</span> width <span class="token operator"><-</span> <span class="token number">8</span> <span class="token comment"># Create a gradient image</span> image_array <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> dim <span class="token operator">=</span> c<span class="token punctuation">(</span>height<span class="token punctuation">,</span> width<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span> paste0<span class="token punctuation">(</span><span class="token string">"row"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token operator">:</span>height<span class="token punctuation">)</span><span class="token punctuation">,</span> paste0<span class="token punctuation">(</span><span class="token string">"col"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token operator">:</span>width<span class="token punctuation">)</span><span class="token punctuation">,</span> c<span class="token punctuation">(</span><span class="token string">"Red"</span><span class="token punctuation">,</span> <span class="token string">"Green"</span><span class="token punctuation">,</span> <span class="token string">"Blue"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Fill with patterns</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>height<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">1</span><span class="token operator">:</span>width<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Red increases with row</span> image_array<span class="token punctuation">[</span>i<span class="token punctuation">,</span> j<span class="token punctuation">,</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 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 operator">*</span> <span class="token number">255</span> <span class="token comment"># Green increases with column</span> image_array<span class="token punctuation">[</span>i<span class="token punctuation">,</span> j<span class="token punctuation">,</span> <span class="token number">2</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 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 operator">*</span> <span class="token number">255</span> <span class="token comment"># Blue is combination</span> image_array<span class="token punctuation">[</span>i<span class="token punctuation">,</span> j<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <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>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 operator">/</span> <span class="token punctuation">(</span>height <span class="token operator">+</span> width <span class="token operator">-</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">255</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> print<span class="token punctuation">(</span><span class="token string">"Image array (first few rows and columns):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>image_array<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">3</span><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> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Extract color channels</span> red_channel <span class="token operator"><-</span> image_array<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token string">"Red"</span><span class="token punctuation">]</span> green_channel <span class="token operator"><-</span> image_array<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token string">"Green"</span><span class="token punctuation">]</span> blue_channel <span class="token operator"><-</span> image_array<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token string">"Blue"</span><span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"Red channel statistics:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Mean:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>red_channel<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">" Range:"</span><span class="token punctuation">,</span> range<span class="token punctuation">(</span>red_channel<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"># Convert to grayscale (standard formula: 0.299R + 0.587G + 0.114B)</span> grayscale <span class="token operator"><-</span> <span class="token number">0.299</span> <span class="token operator">*</span> image_array<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token number">0.587</span> <span class="token operator">*</span> image_array<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token number">0.114</span> <span class="token operator">*</span> image_array<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span><span class="token string">"Grayscale image:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>grayscale<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Flip image horizontally</span> flipped <span class="token operator"><-</span> image_array<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> print<span class="token punctuation">(</span><span class="token string">"Flipped image (first row becomes last):"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>flipped<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">3</span><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> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
Example 3: Stock Portfolio Analysis
|
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
<span class="token comment"># Create portfolio data</span> <span class="token comment"># Dimensions: [stock, day, metric] where metric = price, volume, volatility</span> stocks <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"AAPL"</span><span class="token punctuation">,</span> <span class="token string">"GOOGL"</span><span class="token punctuation">,</span> <span class="token string">"MSFT"</span><span class="token punctuation">,</span> <span class="token string">"AMZN"</span><span class="token punctuation">,</span> <span class="token string">"TSLA"</span><span class="token punctuation">)</span> days <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">30</span> metrics <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Price"</span><span class="token punctuation">,</span> <span class="token string">"Volume"</span><span class="token punctuation">,</span> <span class="token string">"Volatility"</span><span class="token punctuation">)</span> set.seed<span class="token punctuation">(</span><span class="token number">456</span><span class="token punctuation">)</span> portfolio <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> dim <span class="token operator">=</span> c<span class="token punctuation">(</span>length<span class="token punctuation">(</span>stocks<span class="token punctuation">)</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>days<span class="token punctuation">)</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>metrics<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span>stocks<span class="token punctuation">,</span> paste0<span class="token punctuation">(</span><span class="token string">"Day"</span><span class="token punctuation">,</span> days<span class="token punctuation">)</span><span class="token punctuation">,</span> metrics<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Generate realistic stock data</span> base_prices <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">150</span><span class="token punctuation">,</span> <span class="token number">2800</span><span class="token punctuation">,</span> <span class="token number">330</span><span class="token punctuation">,</span> <span class="token number">3400</span><span class="token punctuation">,</span> <span class="token number">900</span><span class="token punctuation">)</span> <span class="token comment"># Base prices for each stock</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>s <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>stocks<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Price series with random walk</span> price <span class="token operator"><-</span> base_prices<span class="token punctuation">[</span>s<span class="token punctuation">]</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>d <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>days<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Random daily change</span> change <span class="token operator"><-</span> rnorm<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.02</span><span class="token punctuation">)</span> <span class="token comment"># 2% daily volatility</span> price <span class="token operator"><-</span> price <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">+</span> change<span class="token punctuation">)</span> portfolio<span class="token punctuation">[</span>s<span class="token punctuation">,</span> d<span class="token punctuation">,</span> <span class="token string">"Price"</span><span class="token punctuation">]</span> <span class="token operator"><-</span> price <span class="token comment"># Volume (in millions)</span> portfolio<span class="token punctuation">[</span>s<span class="token punctuation">,</span> d<span class="token punctuation">,</span> <span class="token string">"Volume"</span><span class="token punctuation">]</span> <span class="token operator"><-</span> runif<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">+</span> abs<span class="token punctuation">(</span>change<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token comment"># Volume spikes with price change</span> <span class="token comment"># Volatility (20-day rolling, simplified)</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>d <span class="token operator">></span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> recent_prices <span class="token operator"><-</span> portfolio<span class="token punctuation">[</span>s<span class="token punctuation">,</span> <span class="token punctuation">(</span>d<span class="token operator">-</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">:</span>d<span class="token punctuation">,</span> <span class="token string">"Price"</span><span class="token punctuation">]</span> portfolio<span class="token punctuation">[</span>s<span class="token punctuation">,</span> d<span class="token punctuation">,</span> <span class="token string">"Volatility"</span><span class="token punctuation">]</span> <span class="token operator"><-</span> sd<span class="token punctuation">(</span>recent_prices<span class="token punctuation">)</span> <span class="token operator">/</span> mean<span class="token punctuation">(</span>recent_prices<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> portfolio<span class="token punctuation">[</span>s<span class="token punctuation">,</span> d<span class="token punctuation">,</span> <span class="token string">"Volatility"</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">0.02</span> <span class="token comment"># Initial value</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">"Portfolio data shape:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>portfolio<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 1: Final prices</span> final_prices <span class="token operator"><-</span> portfolio<span class="token punctuation">[</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>days<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"Price"</span><span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"\nFinal prices:\n"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>s <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>stocks<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">" "</span><span class="token punctuation">,</span> stocks<span class="token punctuation">[</span>s<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>final_prices<span class="token punctuation">[</span>s<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">,</span> sep<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Analysis 2: Total return</span> initial_prices <span class="token operator"><-</span> portfolio<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">"Price"</span><span class="token punctuation">]</span> returns <span class="token operator"><-</span> <span class="token punctuation">(</span>final_prices <span class="token operator">-</span> initial_prices<span class="token punctuation">)</span> <span class="token operator">/</span> initial_prices <span class="token operator">*</span> <span class="token number">100</span> cat<span class="token punctuation">(</span><span class="token string">"\nTotal returns:\n"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>s <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>stocks<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">" "</span><span class="token punctuation">,</span> stocks<span class="token punctuation">[</span>s<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>returns<span class="token punctuation">[</span>s<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> sep<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Analysis 3: Average daily volume</span> avg_volume <span class="token operator"><-</span> apply<span class="token punctuation">(</span>portfolio<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token string">"Volume"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> mean<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"\nAverage daily volume (millions):\n"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>avg_volume<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 4: Risk (average volatility)</span> avg_volatility <span class="token operator"><-</span> apply<span class="token punctuation">(</span>portfolio<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token string">"Volatility"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> mean<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"\nAverage volatility:\n"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>avg_volatility<span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 5: Correlation between stocks (based on daily returns)</span> <span class="token comment"># Extract price matrix [stocks × days]</span> price_matrix <span class="token operator"><-</span> portfolio<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token string">"Price"</span><span class="token punctuation">]</span> <span class="token comment"># Calculate daily returns</span> returns_matrix <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> length<span class="token punctuation">(</span>stocks<span class="token punctuation">)</span><span class="token punctuation">,</span> ncol <span class="token operator">=</span> length<span class="token punctuation">(</span>days<span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> rownames<span class="token punctuation">(</span>returns_matrix<span class="token punctuation">)</span> <span class="token operator"><-</span> stocks <span class="token keyword">for</span> <span class="token punctuation">(</span>s <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>stocks<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> returns_matrix<span class="token punctuation">[</span>s<span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token operator"><-</span> diff<span class="token punctuation">(</span>price_matrix<span class="token punctuation">[</span>s<span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">/</span> price_matrix<span class="token punctuation">[</span>s<span class="token punctuation">,</span> <span class="token operator">-</span>length<span class="token punctuation">(</span>days<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token comment"># Correlation matrix</span> cor_matrix <span class="token operator"><-</span> cor<span class="token punctuation">(</span>t<span class="token punctuation">(</span>returns_matrix<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"\nCorrelation matrix of daily returns:"</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> |
Example 4: Scientific Data – 3D Chemical Concentration
|
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 68 69 70 71 72 73 74 75 76 |
<span class="token comment"># Simulate concentration of a chemical in a 3D space over time</span> <span class="token comment"># Dimensions: [x, y, z, time]</span> x_coords <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">10</span> y_coords <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">8</span> z_coords <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span> time_points <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">4</span> <span class="token comment"># Create 4D array</span> concentration <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> dim <span class="token operator">=</span> c<span class="token punctuation">(</span>length<span class="token punctuation">(</span>x_coords<span class="token punctuation">)</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>y_coords<span class="token punctuation">)</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>z_coords<span class="token punctuation">)</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>time_points<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dimnames <span class="token operator">=</span> list<span class="token punctuation">(</span> paste0<span class="token punctuation">(</span><span class="token string">"x"</span><span class="token punctuation">,</span> x_coords<span class="token punctuation">)</span><span class="token punctuation">,</span> paste0<span class="token punctuation">(</span><span class="token string">"y"</span><span class="token punctuation">,</span> y_coords<span class="token punctuation">)</span><span class="token punctuation">,</span> paste0<span class="token punctuation">(</span><span class="token string">"z"</span><span class="token punctuation">,</span> z_coords<span class="token punctuation">)</span><span class="token punctuation">,</span> paste0<span class="token punctuation">(</span><span class="token string">"t"</span><span class="token punctuation">,</span> time_points<span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Model: diffusion from a point source</span> source_x <span class="token operator"><-</span> <span class="token number">5</span> source_y <span class="token operator"><-</span> <span class="token number">4</span> source_z <span class="token operator"><-</span> <span class="token number">3</span> source_strength <span class="token operator"><-</span> <span class="token number">100</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>t <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>time_points<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>x <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>x_coords<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>y <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>y_coords<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>z <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>z_coords<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># Distance from source</span> dist <span class="token operator"><-</span> sqrt<span class="token punctuation">(</span><span class="token punctuation">(</span>x <span class="token operator">-</span> source_x<span class="token punctuation">)</span><span class="token operator">^</span><span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>y <span class="token operator">-</span> source_y<span class="token punctuation">)</span><span class="token operator">^</span><span class="token number">2</span> <span class="token operator">+</span> <span class="token punctuation">(</span>z <span class="token operator">-</span> source_z<span class="token punctuation">)</span><span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Concentration decreases with distance and increases with time</span> <span class="token comment"># Simple diffusion model</span> concentration<span class="token punctuation">[</span>x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> z<span class="token punctuation">,</span> t<span class="token punctuation">]</span> <span class="token operator"><-</span> source_strength <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">+</span> dist<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> exp<span class="token punctuation">(</span><span class="token operator">-</span>t <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 punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> print<span class="token punctuation">(</span><span class="token string">"Concentration data shape:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>concentration<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Analysis 1: Concentration at source over time</span> source_conc <span class="token operator"><-</span> concentration<span class="token punctuation">[</span>source_x<span class="token punctuation">,</span> source_y<span class="token punctuation">,</span> source_z<span class="token punctuation">,</span> <span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"\nConcentration at source over time:\n"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>t <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>time_points<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">" t="</span><span class="token punctuation">,</span> time_points<span class="token punctuation">[</span>t<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>source_conc<span class="token punctuation">[</span>t<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">,</span> sep<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Analysis 2: Average concentration by z-level over time</span> z_avg <span class="token operator"><-</span> apply<span class="token punctuation">(</span>concentration<span class="token punctuation">,</span> c<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> mean<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"\nAverage concentration by z-level:\n"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>z_avg<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"># Analysis 3: Find max concentration at each time</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>t <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>length<span class="token punctuation">(</span>time_points<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> max_conc <span class="token operator"><-</span> max<span class="token punctuation">(</span>concentration<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token punctuation">,</span> t<span class="token punctuation">]</span><span class="token punctuation">)</span> max_pos <span class="token operator"><-</span> which<span class="token punctuation">(</span>concentration<span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token punctuation">,</span> <span class="token punctuation">,</span> t<span class="token punctuation">]</span> <span class="token operator">==</span> max_conc<span class="token punctuation">,</span> arr.ind <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"\nTime"</span><span class="token punctuation">,</span> t<span class="token punctuation">,</span> <span class="token string">"- Max concentration:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>max_conc<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"at (x="</span><span class="token punctuation">,</span> max_pos<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">", y="</span><span class="token punctuation">,</span> max_pos<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">", z="</span><span class="token punctuation">,</span> max_pos<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">")"</span><span class="token punctuation">,</span> sep<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Analysis 4: Concentration profile along x-axis at mid y,z, final time</span> mid_y <span class="token operator"><-</span> floor<span class="token punctuation">(</span>length<span class="token punctuation">(</span>y_coords<span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span> mid_z <span class="token operator"><-</span> floor<span class="token punctuation">(</span>length<span class="token punctuation">(</span>z_coords<span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span> final_t <span class="token operator"><-</span> length<span class="token punctuation">(</span>time_points<span class="token punctuation">)</span> x_profile <span class="token operator"><-</span> concentration<span class="token punctuation">[</span><span class="token punctuation">,</span> mid_y<span class="token punctuation">,</span> mid_z<span class="token punctuation">,</span> final_t<span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"\n\nConcentration profile along x-axis at final time:\n"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>x_profile<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 7: Higher-Dimensional Arrays
4D Arrays and Beyond
|
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"># Create a 4D array</span> arr4d <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">48</span><span class="token punctuation">,</span> dim <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">3</span><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 punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr4d<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 3 4 2</span> <span class="token comment"># Access elements in 4D</span> print<span class="token punctuation">(</span>arr4d<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">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Row 1, Col 2, Layer 3, Slice 2</span> <span class="token comment"># Apply over dimensions</span> <span class="token comment"># Mean across dimensions 1 and 2 (for each layer-slice combination)</span> result <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr4d<span class="token punctuation">,</span> c<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> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 4 2</span> <span class="token comment"># 5D array example</span> arr5d <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">96</span><span class="token punctuation">,</span> dim <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">3</span><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">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr5d<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 3 4 2 2</span> |
Reshaping Arrays
|
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 |
<span class="token comment"># Start with a vector</span> vec <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span> <span class="token comment"># Reshape into different dimensions</span> arr1 <span class="token operator"><-</span> array<span class="token punctuation">(</span>vec<span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> arr2 <span class="token operator"><-</span> array<span class="token punctuation">(</span>vec<span class="token punctuation">,</span> dim <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">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> arr3 <span class="token operator"><-</span> array<span class="token punctuation">(</span>vec<span class="token punctuation">,</span> dim <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">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Different shapes, same data:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"arr1 dimensions:"</span><span class="token punctuation">,</span> dim<span class="token punctuation">(</span>arr1<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">"arr2 dimensions:"</span><span class="token punctuation">,</span> dim<span class="token punctuation">(</span>arr2<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">"arr3 dimensions:"</span><span class="token punctuation">,</span> dim<span class="token punctuation">(</span>arr3<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"># Check if they contain the same data (different order)</span> print<span class="token punctuation">(</span>all<span class="token punctuation">(</span>arr1 <span class="token operator">==</span> arr2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># FALSE - different ordering</span> <span class="token comment"># aperm() to permute dimensions</span> arr1_perm <span class="token operator"><-</span> aperm<span class="token punctuation">(</span>arr1<span class="token punctuation">,</span> perm <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">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>arr1_perm<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 3 4 2 - same as arr2's dimensions</span> |
Part 8: Arrays vs Other Structures
Arrays vs Matrices
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token comment"># Matrix is a 2D array</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> arr <span class="token operator"><-</span> array<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> dim <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">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Matrix and array comparison:"</span><span class="token punctuation">)</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>class<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "array"</span> print<span class="token punctuation">(</span>all<span class="token punctuation">(</span>mat <span class="token operator">==</span> arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE - they contain the same data</span> <span class="token comment"># But matrices have some special methods</span> print<span class="token punctuation">(</span>is.matrix<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE</span> print<span class="token punctuation">(</span>is.matrix<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE (arrays with 2D are also matrices)</span> print<span class="token punctuation">(</span>is.array<span class="token punctuation">(</span>mat<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE</span> |
Arrays vs Lists
|
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"># Arrays are homogeneous and rectangular</span> arr <span class="token operator"><-</span> array<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> dim <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">3</span><span class="token punctuation">,</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">"Array:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token comment"># Lists can be ragged (different lengths) and heterogeneous</span> lst <span class="token operator"><-</span> list<span class="token punctuation">(</span> first <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> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> second <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">,</span> third <span class="token operator">=</span> <span class="token string">"text"</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"List:"</span><span class="token punctuation">)</span> str<span class="token punctuation">(</span>lst<span class="token punctuation">)</span> <span class="token comment"># When to use each</span> <span class="token comment"># Arrays: For numerical multi-dimensional data (images, scientific data)</span> <span class="token comment"># Lists: For complex, heterogeneous, nested structures</span> |
Part 9: Common Operations with Arrays
Marginal Sums and Means
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># Sum across all dimensions</span> print<span class="token punctuation">(</span>sum<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Sum across specific dimensions</span> row_sums <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> sum<span class="token punctuation">)</span> <span class="token comment"># Sum across rows</span> col_sums <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> sum<span class="token punctuation">)</span> <span class="token comment"># Sum across columns</span> layer_sums <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> sum<span class="token punctuation">)</span> <span class="token comment"># Sum across layers</span> cat<span class="token punctuation">(</span><span class="token string">"Row sums:"</span><span class="token punctuation">,</span> row_sums<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">"Column sums:"</span><span class="token punctuation">,</span> col_sums<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">"Layer sums:"</span><span class="token punctuation">,</span> layer_sums<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> |
Cumulative Operations
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># Cumulative sum along first dimension</span> cumsum_dim1 <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> c<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> cumsum<span class="token punctuation">)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>cumsum_dim1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># This returns a matrix where each column is cumulative sum</span> <span class="token comment"># Let's reshape to understand</span> reshaped <span class="token operator"><-</span> array<span class="token punctuation">(</span>cumsum_dim1<span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Original first layer:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr<span class="token punctuation">[</span><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> print<span class="token punctuation">(</span><span class="token string">"Cumulative sum first layer:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>reshaped<span class="token punctuation">[</span><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> |
Sorting and Ordering
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span>sample<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Original array:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token comment"># Sort within each column-layer combination</span> sorted_dim1 <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> c<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> sort<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Sorted within each column-layer:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>sorted_dim1<span class="token punctuation">)</span> <span class="token comment"># Find order</span> ordered_dim1 <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> c<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> order<span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"Order indices:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>ordered_dim1<span class="token punctuation">)</span> |
Part 10: Common Mistakes and How to Avoid Them
Mistake 1: Confusing Dimension Order
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment"># ❌ Wrong dimension order</span> arr_wrong <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</span><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"># 4 rows, 3 cols, 2 layers</span> <span class="token comment"># ✅ Think carefully about your data organization</span> <span class="token comment"># For image: [height, width, channels]</span> <span class="token comment"># For time series: [observations, variables, time]</span> <span class="token comment"># For scientific: [x, y, z, time]</span> <span class="token comment"># Always document your dimension order</span> <span class="token comment"># e.g., data[city, month, year]</span> |
Mistake 2: Forgetting that apply Returns Different Structures
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># ❌ apply can return vector, matrix, or array depending on dimensions</span> result1 <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> mean<span class="token punctuation">)</span> <span class="token comment"># Returns vector (length 2)</span> result2 <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<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 punctuation">,</span> mean<span class="token punctuation">)</span> <span class="token comment"># Returns matrix (2x3)</span> result3 <span class="token operator"><-</span> apply<span class="token punctuation">(</span>arr<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 punctuation">,</span> mean<span class="token punctuation">)</span> <span class="token comment"># Returns array (same dims)</span> <span class="token comment"># ✅ Check the result's dimensions</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>result1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># NULL (it's a vector)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>result2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 3</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>result3<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 2 3 4</span> |
Mistake 3: Indexing Out of Bounds
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># ❌ This will cause error</span> <span class="token comment"># arr[3, 1, 1] # Error: subscript out of bounds</span> <span class="token comment"># ✅ Check dimensions first</span> safe_access <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>arr<span class="token punctuation">,</span> i<span class="token punctuation">,</span> j<span class="token punctuation">,</span> k<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator"><=</span> dim<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">&&</span> j <span class="token operator"><=</span> dim<span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">&&</span> k <span class="token operator"><=</span> dim<span class="token punctuation">(</span>arr<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 punctuation">{</span> return<span class="token punctuation">(</span>arr<span class="token punctuation">[</span>i<span class="token punctuation">,</span> j<span class="token punctuation">,</span> k<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> stop<span class="token punctuation">(</span><span class="token string">"Index out of bounds"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Mistake 4: Not Using drop = FALSE
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
arr <span class="token operator"><-</span> array<span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">,</span> dim <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">3</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 comment"># ❌ This reduces dimension</span> slice <span class="token operator"><-</span> arr<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"># Returns a matrix (3x4)</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>slice<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 3 4</span> <span class="token comment"># ✅ Use drop = FALSE to preserve dimensions</span> slice_full <span class="token operator"><-</span> arr<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> drop <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>dim<span class="token punctuation">(</span>slice_full<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 3 4</span> |
Mistake 5: Assuming Arrays are Always Numeric
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment"># Arrays can be character or logical too</span> char_array <span class="token operator"><-</span> array<span class="token punctuation">(</span>letters<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">24</span><span class="token punctuation">]</span><span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>char_array<span class="token punctuation">)</span> logical_array <span class="token operator"><-</span> array<span class="token punctuation">(</span>rep<span class="token punctuation">(</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> <span class="token number">12</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dim <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">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>logical_array<span class="token punctuation">)</span> <span class="token comment"># But operations are type-specific</span> <span class="token comment"># mean(char_array) # Error!</span> |
Summary: The Array Philosophy
Arrays are your tool for multi-dimensional homogeneous data. Master these concepts:
Creating arrays:
-
array()withdimparameter -
Setting
dimattribute on vectors -
Named dimensions with
dimnames
Accessing elements:
-
[dim1, dim2, dim3, ...]notation -
Dimension names for readability
-
Logical indexing
Key functions:
-
dim(),length(),dimnames() -
apply()for operations across dimensions -
aperm()for permuting dimensions -
abind()for combining arrays -
drop()for removing singleton dimensions
Best practices:
-
Document your dimension order
-
Use
drop = FALSEto preserve structure -
Check dimensions before indexing
-
Understand what
apply()returns -
Use meaningful dimension names
When to use arrays:
-
Image data (height × width × channels)
-
Scientific data (x × y × z × time)
-
Multi-dimensional measurements
-
Any data with >2 dimensions
Arrays extend the power of matrices to higher dimensions. They’re essential for scientific computing, image processing, and any domain where data naturally lives in more than two dimensions. Master arrays, and you’ll be able to handle complex multi-dimensional data with ease!
Would you like me to elaborate on any specific aspect of arrays or explore more advanced array operations?
