Chapter 30: R Lists
Part 1: What is a List?
A list is a vector that can contain elements of different types and different lengths. Each element of a list can be any R object – vectors, matrices, data frames, functions, or even other lists.
Key Characteristics of Lists
-
Heterogeneous – Can contain different data types
-
Recursive – Can contain other lists
-
Flexible length – Elements can have different lengths
-
Named elements – Can have names for easy access
Part 2: Creating Lists
Basic List Creation
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment"># Simple list with mixed types</span> my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span> <span class="token number">42</span><span class="token punctuation">,</span> <span class="token comment"># numeric</span> <span class="token string">"Hello, World!"</span><span class="token punctuation">,</span> <span class="token comment"># character</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token comment"># logical</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token comment"># vector</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 comment"># matrix</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> |
Named Lists
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment"># List with named elements</span> person <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Alice"</span><span class="token punctuation">,</span> age <span class="token operator">=</span> <span class="token number">30</span><span class="token punctuation">,</span> married <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> children <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"Bob"</span><span class="token punctuation">,</span> <span class="token string">"Charlie"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> scores <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">85</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">,</span> <span class="token number">78</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span>person<span class="token punctuation">)</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>person<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "name" "age" "married" "children" "scores"</span> |
Creating Empty Lists
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment"># Empty list</span> empty_list <span class="token operator"><-</span> list<span class="token punctuation">(</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>empty_list<span class="token punctuation">)</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>empty_list<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 0</span> <span class="token comment"># List with predefined length</span> preallocated <span class="token operator"><-</span> vector<span class="token punctuation">(</span><span class="token string">"list"</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>preallocated<span class="token punctuation">)</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>preallocated<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 5</span> |
Lists from Other Structures
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token comment"># Convert vector to list</span> vec <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span> list_from_vec <span class="token operator"><-</span> as.list<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> print<span class="token punctuation">(</span>list_from_vec<span class="token punctuation">)</span> <span class="token comment"># Convert list to vector (if possible)</span> vec_from_list <span class="token operator"><-</span> unlist<span class="token punctuation">(</span>list_from_vec<span class="token punctuation">)</span> print<span class="token punctuation">(</span>vec_from_list<span class="token punctuation">)</span> <span class="token comment"># Named vector to list</span> named_vec <span class="token operator"><-</span> c<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> c <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> list_from_named <span class="token operator"><-</span> as.list<span class="token punctuation">(</span>named_vec<span class="token punctuation">)</span> print<span class="token punctuation">(</span>list_from_named<span class="token punctuation">)</span> |
Part 3: Accessing List Elements
This is one of the most important topics – understanding the different ways to access list elements.
The Three Access Methods
|
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 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Alice"</span><span class="token punctuation">,</span> age <span class="token operator">=</span> <span class="token number">30</span><span class="token punctuation">,</span> scores <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">85</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">,</span> <span class="token number">78</span><span class="token punctuation">)</span><span class="token punctuation">,</span> details <span class="token operator">=</span> list<span class="token punctuation">(</span> city <span class="token operator">=</span> <span class="token string">"New York"</span><span class="token punctuation">,</span> job <span class="token operator">=</span> <span class="token string">"Engineer"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment"># 1. $ operator - access by name (returns the element)</span> print<span class="token punctuation">(</span>my_list<span class="token operator">$</span>name<span class="token punctuation">)</span> <span class="token comment"># "Alice"</span> print<span class="token punctuation">(</span>my_list<span class="token operator">$</span>scores<span class="token punctuation">)</span> <span class="token comment"># 85 92 78</span> print<span class="token punctuation">(</span>my_list<span class="token operator">$</span>details<span class="token operator">$</span>city<span class="token punctuation">)</span> <span class="token comment"># "New York"</span> <span class="token comment"># 2. [[ ]] - access by name or position (returns the element)</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"name"</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "Alice"</span> print<span class="token punctuation">(</span>my_list<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"># 30 (second element)</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"details"</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"city"</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "New York"</span> <span class="token comment"># 3. [ ] - returns a sublist (always a list)</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">[</span><span class="token string">"name"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># List with one element: list(name = "Alice")</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">[</span>c<span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">,</span> <span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># List with two elements</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># List with first two elements</span> |
Understanding the Difference
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<span class="token comment"># Create a simple list</span> test_list <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token comment"># Single bracket [ ] returns a list</span> result1 <span class="token operator"><-</span> test_list<span class="token punctuation">[</span><span class="token string">"a"</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>result1<span class="token punctuation">)</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>result1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "list"</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>result1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>result1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "a"</span> <span class="token comment"># Double bracket [[ ]] returns the element</span> result2 <span class="token operator"><-</span> test_list<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"a"</span><span class="token punctuation">]</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>result2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>result2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "double"</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>result2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>result2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># NULL (no names for a number)</span> <span class="token comment"># Practical difference - can't do arithmetic with sublist</span> <span class="token comment"># result1 + 5 # Error!</span> print<span class="token punctuation">(</span>result2 <span class="token operator">+</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token comment"># 15 - works fine</span> |
Accessing Non-existent Elements
|
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"># $ returns NULL for non-existent names</span> print<span class="token punctuation">(</span>my_list<span class="token operator">$</span>nonexistent<span class="token punctuation">)</span> <span class="token comment"># NULL</span> <span class="token comment"># [[ ]] errors for non-existent names</span> <span class="token comment"># print(my_list[["nonexistent"]]) # Error!</span> <span class="token comment"># Safer to check first</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>is.null<span class="token punctuation">(</span>my_list<span class="token operator">$</span>nonexistent<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> print<span class="token punctuation">(</span>my_list<span class="token operator">$</span>nonexistent<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> print<span class="token punctuation">(</span><span class="token string">"Element doesn't exist"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Or use purrr::pluck() in tidyverse (returns NULL instead of error)</span> <span class="token comment"># pluck(my_list, "nonexistent") # NULL</span> |
Part 4: Modifying Lists
Adding Elements
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Add using $ (if name doesn't exist, creates new)</span> my_list<span class="token operator">$</span>c <span class="token operator"><-</span> <span class="token number">3</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token comment"># Add using [[ ]]</span> my_list<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"d"</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">4</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token comment"># Add using [ ] (must be named)</span> my_list<span class="token punctuation">[</span><span class="token string">"e"</span><span class="token punctuation">]</span> <span class="token operator"><-</span> list<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span> <span class="token comment"># Note: need to assign a list</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token comment"># Add at specific position</span> my_list<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">6</span> <span class="token comment"># Creates elements 1-5 if they don't exist</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token comment"># Note: elements 4-5 are NULL</span> |
Removing Elements
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> c <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> d <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token comment"># Remove by setting to NULL</span> my_list<span class="token operator">$</span>b <span class="token operator"><-</span> <span class="token keyword">NULL</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token comment"># Remove multiple</span> my_list<span class="token punctuation">[</span>c<span class="token punctuation">(</span><span class="token string">"c"</span><span class="token punctuation">,</span> <span class="token string">"d"</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token keyword">NULL</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token comment"># Remove by position</span> my_list<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token keyword">NULL</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token comment"># Now empty</span> |
Modifying Elements
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
student <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Alice"</span><span class="token punctuation">,</span> age <span class="token operator">=</span> <span class="token number">25</span><span class="token punctuation">,</span> grades <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">85</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">,</span> <span class="token number">78</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment"># Modify scalar element</span> student<span class="token operator">$</span>age <span class="token operator"><-</span> <span class="token number">26</span> print<span class="token punctuation">(</span>student<span class="token punctuation">)</span> <span class="token comment"># Modify vector element</span> student<span class="token operator">$</span>grades<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">95</span> print<span class="token punctuation">(</span>student<span class="token punctuation">)</span> <span class="token comment"># Add to vector</span> student<span class="token operator">$</span>grades <span class="token operator"><-</span> c<span class="token punctuation">(</span>student<span class="token operator">$</span>grades<span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>student<span class="token punctuation">)</span> <span class="token comment"># Modify nested list</span> student<span class="token operator">$</span>address <span class="token operator"><-</span> list<span class="token punctuation">(</span>city <span class="token operator">=</span> <span class="token string">"Boston"</span><span class="token punctuation">,</span> zip <span class="token operator">=</span> <span class="token number">02108</span><span class="token punctuation">)</span> student<span class="token operator">$</span>address<span class="token operator">$</span>city <span class="token operator"><-</span> <span class="token string">"Cambridge"</span> print<span class="token punctuation">(</span>student<span class="token punctuation">)</span> |
Part 5: Working with List Elements
Applying Functions to Lists
|
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 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span> numbers <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> squares <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">,</span> cubes <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">^</span><span class="token number">3</span> <span class="token punctuation">)</span> <span class="token comment"># lapply - returns list</span> result_list <span class="token operator"><-</span> lapply<span class="token punctuation">(</span>my_list<span class="token punctuation">,</span> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span>result_list<span class="token punctuation">)</span> <span class="token comment"># sapply - tries to simplify to vector</span> result_vec <span class="token operator"><-</span> sapply<span class="token punctuation">(</span>my_list<span class="token punctuation">,</span> mean<span class="token punctuation">)</span> print<span class="token punctuation">(</span>result_vec<span class="token punctuation">)</span> <span class="token comment"># vapply - with specified return type</span> result_vapply <span class="token operator"><-</span> vapply<span class="token punctuation">(</span>my_list<span class="token punctuation">,</span> mean<span class="token punctuation">,</span> numeric<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>result_vapply<span class="token punctuation">)</span> <span class="token comment"># Custom function</span> result <span class="token operator"><-</span> lapply<span class="token punctuation">(</span>my_list<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> x<span class="token punctuation">[</span>x <span class="token operator">></span> <span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>result<span class="token punctuation">)</span> |
List Concatenation
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
list1 <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> list2 <span class="token operator"><-</span> list<span class="token punctuation">(</span>c <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> d <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token comment"># Combine lists</span> combined <span class="token operator"><-</span> c<span class="token punctuation">(</span>list1<span class="token punctuation">,</span> list2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>combined<span class="token punctuation">)</span> <span class="token comment"># With duplicate names</span> list3 <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">,</span> e <span class="token operator">=</span> <span class="token number">6</span><span class="token punctuation">)</span> combined2 <span class="token operator"><-</span> c<span class="token punctuation">(</span>list1<span class="token punctuation">,</span> list3<span class="token punctuation">)</span> <span class="token comment"># 'a' appears twice</span> print<span class="token punctuation">(</span>combined2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>combined2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "a" "b" "a" "e"</span> |
Flattening Lists
|
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 |
nested_list <span class="token operator"><-</span> list<span class="token punctuation">(</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> list<span class="token punctuation">(</span> c <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> d <span class="token operator">=</span> list<span class="token punctuation">(</span> e <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> f <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 comment"># unlist flattens to vector</span> flattened <span class="token operator"><-</span> unlist<span class="token punctuation">(</span>nested_list<span class="token punctuation">)</span> print<span class="token punctuation">(</span>flattened<span class="token punctuation">)</span> <span class="token comment"># With names</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>flattened<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "a" "b.c" "b.d.e" "b.d.f"</span> <span class="token comment"># Control flattening</span> flattened2 <span class="token operator"><-</span> unlist<span class="token punctuation">(</span>nested_list<span class="token punctuation">,</span> use.names <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>flattened2<span class="token punctuation">)</span> |
Part 6: Nested Lists
Lists can contain other lists, creating complex hierarchical structures:
Creating Nested Lists
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<span class="token comment"># Direct creation</span> company <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Tech Corp"</span><span class="token punctuation">,</span> founded <span class="token operator">=</span> <span class="token number">2010</span><span class="token punctuation">,</span> departments <span class="token operator">=</span> list<span class="token punctuation">(</span> engineering <span class="token operator">=</span> list<span class="token punctuation">(</span> manager <span class="token operator">=</span> <span class="token string">"Bob"</span><span class="token punctuation">,</span> employees <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"Alice"</span><span class="token punctuation">,</span> <span class="token string">"Charlie"</span><span class="token punctuation">,</span> <span class="token string">"Diana"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> projects <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"Project X"</span><span class="token punctuation">,</span> <span class="token string">"Project Y"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> sales <span class="token operator">=</span> list<span class="token punctuation">(</span> manager <span class="token operator">=</span> <span class="token string">"Eve"</span><span class="token punctuation">,</span> employees <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"Frank"</span><span class="token punctuation">,</span> <span class="token string">"Grace"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> regions <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"North"</span><span class="token punctuation">,</span> <span class="token string">"South"</span><span class="token punctuation">,</span> <span class="token string">"East"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> hr <span class="token operator">=</span> list<span class="token punctuation">(</span> manager <span class="token operator">=</span> <span class="token string">"Henry"</span><span class="token punctuation">,</span> employees <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"Iris"</span><span class="token punctuation">,</span> <span class="token string">"Jack"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> policies <span class="token operator">=</span> list<span class="token punctuation">(</span> vacation <span class="token operator">=</span> <span class="token string">"20 days"</span><span class="token punctuation">,</span> sick_leave <span class="token operator">=</span> <span class="token string">"10 days"</span><span class="token punctuation">,</span> remote <span class="token operator">=</span> <span class="token string">"2 days/week"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> headquarters <span class="token operator">=</span> list<span class="token punctuation">(</span> city <span class="token operator">=</span> <span class="token string">"San Francisco"</span><span class="token punctuation">,</span> address <span class="token operator">=</span> <span class="token string">"123 Market St"</span><span class="token punctuation">,</span> floors <span class="token operator">=</span> <span class="token number">5</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment"># Explore structure</span> str<span class="token punctuation">(</span>company<span class="token punctuation">,</span> max.level <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Access nested elements</span> print<span class="token punctuation">(</span>company<span class="token operator">$</span>departments<span class="token operator">$</span>engineering<span class="token operator">$</span>manager<span class="token punctuation">)</span> print<span class="token punctuation">(</span>company<span class="token operator">$</span>departments<span class="token operator">$</span>hr<span class="token operator">$</span>policies<span class="token operator">$</span>vacation<span class="token punctuation">)</span> print<span class="token punctuation">(</span>company<span class="token operator">$</span>headquarters<span class="token operator">$</span>city<span class="token punctuation">)</span> |
Building Nested Lists Programmatically
|
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 |
<span class="token comment"># Initialize empty list</span> data <span class="token operator"><-</span> list<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Add levels gradually</span> data<span class="token operator">$</span>users <span class="token operator"><-</span> list<span class="token punctuation">(</span><span class="token punctuation">)</span> data<span class="token operator">$</span>users<span class="token operator">$</span>alice <span class="token operator"><-</span> list<span class="token punctuation">(</span> age <span class="token operator">=</span> <span class="token number">25</span><span class="token punctuation">,</span> email <span class="token operator">=</span> <span class="token string">"alice@example.com"</span><span class="token punctuation">,</span> roles <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"admin"</span><span class="token punctuation">,</span> <span class="token string">"editor"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> data<span class="token operator">$</span>users<span class="token operator">$</span>bob <span class="token operator"><-</span> list<span class="token punctuation">(</span> age <span class="token operator">=</span> <span class="token number">30</span><span class="token punctuation">,</span> email <span class="token operator">=</span> <span class="token string">"bob@example.com"</span><span class="token punctuation">,</span> roles <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"viewer"</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> data<span class="token operator">$</span>metadata <span class="token operator"><-</span> list<span class="token punctuation">(</span> created <span class="token operator">=</span> Sys.time<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> version <span class="token operator">=</span> <span class="token string">"1.0"</span><span class="token punctuation">,</span> source <span class="token operator">=</span> <span class="token string">"user input"</span> <span class="token punctuation">)</span> print<span class="token punctuation">(</span>str<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 7: Practical Examples
Example 1: Student Database
|
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
<span class="token comment"># Create a student database using lists</span> students <span class="token operator"><-</span> list<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Add students</span> students<span class="token operator">$</span>S001 <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Alice Johnson"</span><span class="token punctuation">,</span> age <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">,</span> major <span class="token operator">=</span> <span class="token string">"Computer Science"</span><span class="token punctuation">,</span> grades <span class="token operator">=</span> list<span class="token punctuation">(</span> math <span class="token operator">=</span> <span class="token number">85</span><span class="token punctuation">,</span> physics <span class="token operator">=</span> <span class="token number">92</span><span class="token punctuation">,</span> programming <span class="token operator">=</span> <span class="token number">88</span><span class="token punctuation">,</span> english <span class="token operator">=</span> <span class="token number">79</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> attendance <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">95</span><span class="token punctuation">,</span> <span class="token number">98</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">)</span><span class="token punctuation">,</span> active <span class="token operator">=</span> <span class="token boolean">TRUE</span> <span class="token punctuation">)</span> students<span class="token operator">$</span>S002 <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Bob Smith"</span><span class="token punctuation">,</span> age <span class="token operator">=</span> <span class="token number">22</span><span class="token punctuation">,</span> major <span class="token operator">=</span> <span class="token string">"Mathematics"</span><span class="token punctuation">,</span> grades <span class="token operator">=</span> list<span class="token punctuation">(</span> math <span class="token operator">=</span> <span class="token number">94</span><span class="token punctuation">,</span> physics <span class="token operator">=</span> <span class="token number">86</span><span class="token punctuation">,</span> programming <span class="token operator">=</span> <span class="token number">75</span><span class="token punctuation">,</span> english <span class="token operator">=</span> <span class="token number">82</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> attendance <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">88</span><span class="token punctuation">,</span> <span class="token number">90</span><span class="token punctuation">,</span> <span class="token number">85</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">)</span><span class="token punctuation">,</span> active <span class="token operator">=</span> <span class="token boolean">TRUE</span> <span class="token punctuation">)</span> students<span class="token operator">$</span>S003 <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Charlie Brown"</span><span class="token punctuation">,</span> age <span class="token operator">=</span> <span class="token number">21</span><span class="token punctuation">,</span> major <span class="token operator">=</span> <span class="token string">"Physics"</span><span class="token punctuation">,</span> grades <span class="token operator">=</span> list<span class="token punctuation">(</span> math <span class="token operator">=</span> <span class="token number">78</span><span class="token punctuation">,</span> physics <span class="token operator">=</span> <span class="token number">95</span><span class="token punctuation">,</span> programming <span class="token operator">=</span> <span class="token number">70</span><span class="token punctuation">,</span> english <span class="token operator">=</span> <span class="token number">85</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> attendance <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">98</span><span class="token punctuation">,</span> <span class="token number">95</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">,</span> active <span class="token operator">=</span> <span class="token boolean">FALSE</span> <span class="token punctuation">)</span> <span class="token comment"># Function to calculate GPA</span> calculate_gpa <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>grades<span class="token punctuation">)</span> <span class="token punctuation">{</span> grades_vec <span class="token operator"><-</span> unlist<span class="token punctuation">(</span>grades<span class="token punctuation">)</span> return<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>grades_vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Analyze students</span> cat<span class="token punctuation">(</span><span class="token string">"Student Database Analysis\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"========================\n\n"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>student_id <span class="token keyword">in</span> names<span class="token punctuation">(</span>students<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> student <span class="token operator"><-</span> students<span class="token punctuation">[</span><span class="token punctuation">[</span>student_id<span class="token punctuation">]</span><span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"Student:"</span><span class="token punctuation">,</span> student<span class="token operator">$</span>name<span class="token punctuation">,</span> <span class="token string">"("</span><span class="token punctuation">,</span> student_id<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">" Major:"</span><span class="token punctuation">,</span> student<span class="token operator">$</span>major<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">" Age:"</span><span class="token punctuation">,</span> student<span class="token operator">$</span>age<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">" Active:"</span><span class="token punctuation">,</span> student<span class="token operator">$</span>active<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># Calculate GPA</span> gpa <span class="token operator"><-</span> calculate_gpa<span class="token punctuation">(</span>student<span class="token operator">$</span>grades<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" GPA:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>gpa<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> <span class="token comment"># Average attendance</span> avg_attendance <span class="token operator"><-</span> mean<span class="token punctuation">(</span>student<span class="token operator">$</span>attendance<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Attendance:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>avg_attendance<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> <span class="token comment"># Best subject</span> grades_vec <span class="token operator"><-</span> unlist<span class="token punctuation">(</span>student<span class="token operator">$</span>grades<span class="token punctuation">)</span> best_subject <span class="token operator"><-</span> names<span class="token punctuation">(</span>grades_vec<span class="token punctuation">)</span><span class="token punctuation">[</span>which.max<span class="token punctuation">(</span>grades_vec<span class="token punctuation">)</span><span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">" Best subject:"</span><span class="token punctuation">,</span> best_subject<span class="token punctuation">,</span> <span class="token string">"("</span><span class="token punctuation">,</span> student<span class="token operator">$</span>grades<span class="token punctuation">[</span><span class="token punctuation">[</span>best_subject<span class="token punctuation">]</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">"\n"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Find top student</span> top_student <span class="token operator"><-</span> <span class="token keyword">NULL</span> top_gpa <span class="token operator"><-</span> <span class="token operator">-</span><span class="token number">Inf</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>student_id <span class="token keyword">in</span> names<span class="token punctuation">(</span>students<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> gpa <span class="token operator"><-</span> calculate_gpa<span class="token punctuation">(</span>students<span class="token punctuation">[</span><span class="token punctuation">[</span>student_id<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">$</span>grades<span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>gpa <span class="token operator">></span> top_gpa<span class="token punctuation">)</span> <span class="token punctuation">{</span> top_gpa <span class="token operator"><-</span> gpa top_student <span class="token operator"><-</span> student_id <span class="token punctuation">}</span> <span class="token punctuation">}</span> cat<span class="token punctuation">(</span><span class="token string">"\nTop Student:"</span><span class="token punctuation">,</span> students<span class="token punctuation">[</span><span class="token punctuation">[</span>top_student<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">$</span>name<span class="token punctuation">,</span> <span class="token string">"with GPA"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>top_gpa<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> |
Example 2: Configuration Management
|
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 85 86 87 88 89 90 91 92 93 |
<span class="token comment"># Application configuration using nested lists</span> config <span class="token operator"><-</span> list<span class="token punctuation">(</span> app <span class="token operator">=</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"DataAnalyzer"</span><span class="token punctuation">,</span> version <span class="token operator">=</span> <span class="token string">"2.1.0"</span><span class="token punctuation">,</span> debug <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> environment <span class="token operator">=</span> <span class="token string">"production"</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> database <span class="token operator">=</span> list<span class="token punctuation">(</span> host <span class="token operator">=</span> <span class="token string">"localhost"</span><span class="token punctuation">,</span> port <span class="token operator">=</span> <span class="token number">5432</span><span class="token punctuation">,</span> name <span class="token operator">=</span> <span class="token string">"analyzer_db"</span><span class="token punctuation">,</span> credentials <span class="token operator">=</span> list<span class="token punctuation">(</span> user <span class="token operator">=</span> <span class="token string">"admin"</span><span class="token punctuation">,</span> password <span class="token operator">=</span> <span class="token string">"secret123"</span><span class="token punctuation">,</span> <span class="token comment"># In real life, never store passwords in code!</span> ssl <span class="token operator">=</span> <span class="token boolean">TRUE</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> pool <span class="token operator">=</span> list<span class="token punctuation">(</span> min_connections <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">,</span> max_connections <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">,</span> timeout <span class="token operator">=</span> <span class="token number">30</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> api <span class="token operator">=</span> list<span class="token punctuation">(</span> endpoints <span class="token operator">=</span> list<span class="token punctuation">(</span> users <span class="token operator">=</span> <span class="token string">"/api/v1/users"</span><span class="token punctuation">,</span> data <span class="token operator">=</span> <span class="token string">"/api/v1/data"</span><span class="token punctuation">,</span> reports <span class="token operator">=</span> <span class="token string">"/api/v1/reports"</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> rate_limit <span class="token operator">=</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token comment"># requests per minute</span> timeout <span class="token operator">=</span> <span class="token number">10</span> <span class="token comment"># seconds</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> logging <span class="token operator">=</span> list<span class="token punctuation">(</span> level <span class="token operator">=</span> <span class="token string">"INFO"</span><span class="token punctuation">,</span> file <span class="token operator">=</span> <span class="token string">"/var/log/analyzer.log"</span><span class="token punctuation">,</span> format <span class="token operator">=</span> <span class="token string">"json"</span><span class="token punctuation">,</span> rotation <span class="token operator">=</span> list<span class="token punctuation">(</span> max_size <span class="token operator">=</span> <span class="token string">"100MB"</span><span class="token punctuation">,</span> max_files <span class="token operator">=</span> <span class="token number">5</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> features <span class="token operator">=</span> list<span class="token punctuation">(</span> enable_cache <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> enable_analytics <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> experimental <span class="token operator">=</span> list<span class="token punctuation">(</span> new_algorithm <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> beta_features <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"feature1"</span><span class="token punctuation">,</span> <span class="token string">"feature2"</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"># Function to get nested config value safely</span> get_config <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>config<span class="token punctuation">,</span> path<span class="token punctuation">,</span> default <span class="token operator">=</span> <span class="token keyword">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> parts <span class="token operator"><-</span> strsplit<span class="token punctuation">(</span>path<span class="token punctuation">,</span> <span class="token string">"\\."</span><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> result <span class="token operator"><-</span> config <span class="token keyword">for</span> <span class="token punctuation">(</span>part <span class="token keyword">in</span> parts<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>is.null<span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token operator">!</span>part <span class="token percent-operator operator">%in%</span> names<span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> return<span class="token punctuation">(</span>default<span class="token punctuation">)</span> <span class="token punctuation">}</span> result <span class="token operator"><-</span> result<span class="token punctuation">[</span><span class="token punctuation">[</span>part<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> return<span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Use the configuration</span> cat<span class="token punctuation">(</span><span class="token string">"App Name:"</span><span class="token punctuation">,</span> get_config<span class="token punctuation">(</span>config<span class="token punctuation">,</span> <span class="token string">"app.name"</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">"Database Port:"</span><span class="token punctuation">,</span> get_config<span class="token punctuation">(</span>config<span class="token punctuation">,</span> <span class="token string">"database.port"</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">"Cache Enabled:"</span><span class="token punctuation">,</span> get_config<span class="token punctuation">(</span>config<span class="token punctuation">,</span> <span class="token string">"features.enable_cache"</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">"Experimental Features:"</span><span class="token punctuation">,</span> paste<span class="token punctuation">(</span>get_config<span class="token punctuation">(</span>config<span class="token punctuation">,</span> <span class="token string">"features.experimental.beta_features"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">,</span> collapse<span class="token operator">=</span><span class="token string">", "</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">"Non-existent key:"</span><span class="token punctuation">,</span> get_config<span class="token punctuation">(</span>config<span class="token punctuation">,</span> <span class="token string">"app.nonexistent"</span><span class="token punctuation">,</span> <span class="token string">"N/A"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># Update configuration</span> config<span class="token operator">$</span>app<span class="token operator">$</span>debug <span class="token operator"><-</span> <span class="token boolean">TRUE</span> config<span class="token operator">$</span>database<span class="token operator">$</span>pool<span class="token operator">$</span>max_connections <span class="token operator"><-</span> <span class="token number">30</span> config<span class="token operator">$</span>features<span class="token operator">$</span>experimental<span class="token operator">$</span>beta_features <span class="token operator"><-</span> c<span class="token punctuation">(</span>config<span class="token operator">$</span>features<span class="token operator">$</span>experimental<span class="token operator">$</span>beta_features<span class="token punctuation">,</span> <span class="token string">"feature3"</span><span class="token punctuation">)</span> <span class="token comment"># Save configuration to file (simulated)</span> save_config <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>config<span class="token punctuation">,</span> filename<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># In real code, you might use saveRDS, jsonlite, or yaml</span> cat<span class="token punctuation">(</span><span class="token string">"Configuration saved to"</span><span class="token punctuation">,</span> filename<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># saveRDS(config, filename)</span> <span class="token punctuation">}</span> save_config<span class="token punctuation">(</span>config<span class="token punctuation">,</span> <span class="token string">"app_config.rds"</span><span class="token punctuation">)</span> |
Example 3: API Response Parser
|
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
<span class="token comment"># Simulate API response</span> api_response <span class="token operator"><-</span> list<span class="token punctuation">(</span> status <span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">,</span> headers <span class="token operator">=</span> list<span class="token punctuation">(</span> content_type <span class="token operator">=</span> <span class="token string">"application/json"</span><span class="token punctuation">,</span> date <span class="token operator">=</span> Sys.time<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> server <span class="token operator">=</span> <span class="token string">"nginx/1.18.0"</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> data <span class="token operator">=</span> list<span class="token punctuation">(</span> users <span class="token operator">=</span> list<span class="token punctuation">(</span> list<span class="token punctuation">(</span> id <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> name <span class="token operator">=</span> <span class="token string">"Alice"</span><span class="token punctuation">,</span> email <span class="token operator">=</span> <span class="token string">"alice@example.com"</span><span class="token punctuation">,</span> posts <span class="token operator">=</span> list<span class="token punctuation">(</span> list<span class="token punctuation">(</span>id <span class="token operator">=</span> <span class="token number">101</span><span class="token punctuation">,</span> title <span class="token operator">=</span> <span class="token string">"First Post"</span><span class="token punctuation">,</span> likes <span class="token operator">=</span> <span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">,</span> list<span class="token punctuation">(</span>id <span class="token operator">=</span> <span class="token number">102</span><span class="token punctuation">,</span> title <span class="token operator">=</span> <span class="token string">"Hello World"</span><span class="token punctuation">,</span> likes <span class="token operator">=</span> <span class="token number">23</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> list<span class="token punctuation">(</span> id <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> name <span class="token operator">=</span> <span class="token string">"Bob"</span><span class="token punctuation">,</span> email <span class="token operator">=</span> <span class="token string">"bob@example.com"</span><span class="token punctuation">,</span> posts <span class="token operator">=</span> list<span class="token punctuation">(</span> list<span class="token punctuation">(</span>id <span class="token operator">=</span> <span class="token number">103</span><span class="token punctuation">,</span> title <span class="token operator">=</span> <span class="token string">"R Programming"</span><span class="token punctuation">,</span> likes <span class="token operator">=</span> <span class="token number">42</span><span class="token punctuation">)</span><span class="token punctuation">,</span> list<span class="token punctuation">(</span>id <span class="token operator">=</span> <span class="token number">104</span><span class="token punctuation">,</span> title <span class="token operator">=</span> <span class="token string">"Data Science"</span><span class="token punctuation">,</span> likes <span class="token operator">=</span> <span class="token number">31</span><span class="token punctuation">)</span><span class="token punctuation">,</span> list<span class="token punctuation">(</span>id <span class="token operator">=</span> <span class="token number">105</span><span class="token punctuation">,</span> title <span class="token operator">=</span> <span class="token string">"Lists in R"</span><span class="token punctuation">,</span> likes <span class="token operator">=</span> <span class="token number">17</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> list<span class="token punctuation">(</span> id <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> name <span class="token operator">=</span> <span class="token string">"Charlie"</span><span class="token punctuation">,</span> email <span class="token operator">=</span> <span class="token string">"charlie@example.com"</span><span class="token punctuation">,</span> posts <span class="token operator">=</span> list<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> pagination <span class="token operator">=</span> list<span class="token punctuation">(</span> page <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> total_pages <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">,</span> total_records <span class="token operator">=</span> <span class="token number">23</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment"># Parse and analyze the response</span> parse_api_response <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token operator">$</span>status <span class="token operator">!=</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> cat<span class="token punctuation">(</span><span class="token string">"Error: API returned status"</span><span class="token punctuation">,</span> response<span class="token operator">$</span>status<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> return<span class="token punctuation">(</span><span class="token keyword">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> users <span class="token operator"><-</span> response<span class="token operator">$</span>data<span class="token operator">$</span>users pagination <span class="token operator"><-</span> response<span class="token operator">$</span>data<span class="token operator">$</span>pagination cat<span class="token punctuation">(</span><span class="token string">"API Response Analysis\n"</span><span class="token punctuation">)</span> cat<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">"Retrieved at:"</span><span class="token punctuation">,</span> format<span class="token punctuation">(</span>response<span class="token operator">$</span>headers<span class="token operator">$</span>date<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">"Server:"</span><span class="token punctuation">,</span> response<span class="token operator">$</span>headers<span class="token operator">$</span>server<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">"Page:"</span><span class="token punctuation">,</span> pagination<span class="token operator">$</span>page<span class="token punctuation">,</span> <span class="token string">"of"</span><span class="token punctuation">,</span> pagination<span class="token operator">$</span>total_pages<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">"Total users:"</span><span class="token punctuation">,</span> pagination<span class="token operator">$</span>total_records<span class="token punctuation">,</span> <span class="token string">"\n\n"</span><span class="token punctuation">)</span> <span class="token comment"># User statistics</span> cat<span class="token punctuation">(</span><span class="token string">"User Statistics:\n"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>user <span class="token keyword">in</span> users<span class="token punctuation">)</span> <span class="token punctuation">{</span> n_posts <span class="token operator"><-</span> length<span class="token punctuation">(</span>user<span class="token operator">$</span>posts<span class="token punctuation">)</span> total_likes <span class="token operator"><-</span> sum<span class="token punctuation">(</span>sapply<span class="token punctuation">(</span>user<span class="token operator">$</span>posts<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span> p<span class="token operator">$</span>likes<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> user<span class="token operator">$</span>name<span class="token punctuation">,</span> <span class="token string">"("</span><span class="token punctuation">,</span> user<span class="token operator">$</span>email<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">" Posts:"</span><span class="token punctuation">,</span> n_posts<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>n_posts <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> cat<span class="token punctuation">(</span><span class="token string">" Total likes:"</span><span class="token punctuation">,</span> total_likes<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">" Avg likes per post:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>total_likes<span class="token operator">/</span>n_posts<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> <span class="token comment"># Most liked post</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>n_posts <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> likes <span class="token operator"><-</span> sapply<span class="token punctuation">(</span>user<span class="token operator">$</span>posts<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span> p<span class="token operator">$</span>likes<span class="token punctuation">)</span> best_post <span class="token operator"><-</span> user<span class="token operator">$</span>posts<span class="token punctuation">[</span><span class="token punctuation">[</span>which.max<span class="token punctuation">(</span>likes<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">" Best post: '"</span><span class="token punctuation">,</span> best_post<span class="token operator">$</span>title<span class="token punctuation">,</span> <span class="token string">"' ("</span><span class="token punctuation">,</span> best_post<span class="token operator">$</span>likes<span class="token punctuation">,</span> <span class="token string">" likes)\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 punctuation">}</span> cat<span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Overall statistics</span> all_posts <span class="token operator"><-</span> unlist<span class="token punctuation">(</span>lapply<span class="token punctuation">(</span>users<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span> u<span class="token operator">$</span>posts<span class="token punctuation">)</span><span class="token punctuation">,</span> recursive <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">)</span> all_likes <span class="token operator"><-</span> sapply<span class="token punctuation">(</span>all_posts<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span> p<span class="token operator">$</span>likes<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Overall Statistics:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Total posts:"</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>all_posts<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>length<span class="token punctuation">(</span>all_posts<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> cat<span class="token punctuation">(</span><span class="token string">" Average likes per post:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>all_likes<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">" Most liked post overall: "</span><span class="token punctuation">,</span> all_posts<span class="token punctuation">[</span><span class="token punctuation">[</span>which.max<span class="token punctuation">(</span>all_likes<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">$</span>title<span class="token punctuation">,</span> <span class="token string">" ("</span><span class="token punctuation">,</span> max<span class="token punctuation">(</span>all_likes<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">" likes)\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 punctuation">}</span> <span class="token comment"># Run the parser</span> parse_api_response<span class="token punctuation">(</span>api_response<span class="token punctuation">)</span> |
Example 4: Data Processing Pipeline
|
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
<span class="token comment"># Create a data processing pipeline using lists</span> create_pipeline <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> pipeline <span class="token operator"><-</span> list<span class="token punctuation">(</span> steps <span class="token operator">=</span> list<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> data <span class="token operator">=</span> <span class="token keyword">NULL</span><span class="token punctuation">,</span> results <span class="token operator">=</span> list<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment"># Method to add a step</span> pipeline<span class="token operator">$</span>add_step <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> func<span class="token punctuation">)</span> <span class="token punctuation">{</span> step <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> name<span class="token punctuation">,</span> func <span class="token operator">=</span> func<span class="token punctuation">,</span> executed <span class="token operator">=</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> result <span class="token operator">=</span> <span class="token keyword">NULL</span> <span class="token punctuation">)</span> pipeline<span class="token operator">$</span>steps <span class="token operator"><-</span> c<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>steps<span class="token punctuation">,</span> list<span class="token punctuation">(</span>step<span class="token punctuation">)</span><span class="token punctuation">)</span> invisible<span class="token punctuation">(</span>pipeline<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Method to run the pipeline</span> pipeline<span class="token operator">$</span>run <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">{</span> pipeline<span class="token operator">$</span>data <span class="token operator"><-</span> data cat<span class="token punctuation">(</span><span class="token string">"Running pipeline on data of length"</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> seq_along<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>steps<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> step <span class="token operator"><-</span> pipeline<span class="token operator">$</span>steps<span class="token punctuation">[</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"Step"</span><span class="token punctuation">,</span> i<span class="token punctuation">,</span> <span class="token string">":"</span><span class="token punctuation">,</span> step<span class="token operator">$</span>name<span class="token punctuation">,</span> <span class="token string">"... "</span><span class="token punctuation">)</span> <span class="token comment"># Apply the function</span> result <span class="token operator"><-</span> step<span class="token operator">$</span>func<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>data<span class="token punctuation">)</span> <span class="token comment"># Store results</span> pipeline<span class="token operator">$</span>steps<span class="token punctuation">[</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">$</span>executed <span class="token operator"><-</span> <span class="token boolean">TRUE</span> pipeline<span class="token operator">$</span>steps<span class="token punctuation">[</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">$</span>result <span class="token operator"><-</span> result pipeline<span class="token operator">$</span>results<span class="token punctuation">[</span><span class="token punctuation">[</span>step<span class="token operator">$</span>name<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator"><-</span> result <span class="token comment"># Update data for next step</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator"><</span> length<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>steps<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> pipeline<span class="token operator">$</span>data <span class="token operator"><-</span> result <span class="token punctuation">}</span> cat<span class="token punctuation">(</span><span class="token string">"done\n"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> cat<span class="token punctuation">(</span><span class="token string">"Pipeline completed\n"</span><span class="token punctuation">)</span> invisible<span class="token punctuation">(</span>pipeline<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Method to get results</span> pipeline<span class="token operator">$</span>get_result <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>step_name <span class="token operator">=</span> <span class="token keyword">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>is.null<span class="token punctuation">(</span>step_name<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> return<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>results<span class="token punctuation">)</span> <span class="token punctuation">}</span> return<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>results<span class="token punctuation">[</span><span class="token punctuation">[</span>step_name<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Method to print summary</span> pipeline<span class="token operator">$</span>summary <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> cat<span class="token punctuation">(</span><span class="token string">"Pipeline Summary\n"</span><span class="token punctuation">)</span> cat<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">"Steps:"</span><span class="token punctuation">,</span> length<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>steps<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> seq_along<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>steps<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> step <span class="token operator"><-</span> pipeline<span class="token operator">$</span>steps<span class="token punctuation">[</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span> status <span class="token operator"><-</span> ifelse<span class="token punctuation">(</span>step<span class="token operator">$</span>executed<span class="token punctuation">,</span> <span class="token string">"✓"</span><span class="token punctuation">,</span> <span class="token string">"✗"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" "</span><span class="token punctuation">,</span> i<span class="token punctuation">,</span> <span class="token string">". "</span><span class="token punctuation">,</span> status<span class="token punctuation">,</span> <span class="token string">" "</span><span class="token punctuation">,</span> step<span class="token operator">$</span>name<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 punctuation">}</span> return<span class="token punctuation">(</span>pipeline<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Create and use the pipeline</span> pipeline <span class="token operator"><-</span> create_pipeline<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Add steps</span> pipeline<span class="token operator">$</span>add_step<span class="token punctuation">(</span><span class="token string">"clean"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">{</span> data<span class="token punctuation">[</span><span class="token operator">!</span>is.na<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> pipeline<span class="token operator">$</span>add_step<span class="token punctuation">(</span><span class="token string">"normalize"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">(</span>data <span class="token operator">-</span> mean<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> sd<span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> pipeline<span class="token operator">$</span>add_step<span class="token punctuation">(</span><span class="token string">"outlier_removal"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">{</span> data<span class="token punctuation">[</span>abs<span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">3</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> pipeline<span class="token operator">$</span>add_step<span class="token punctuation">(</span><span class="token string">"summary_stats"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">{</span> list<span class="token punctuation">(</span> mean <span class="token operator">=</span> mean<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">,</span> sd <span class="token operator">=</span> sd<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">,</span> min <span class="token operator">=</span> min<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">,</span> max <span class="token operator">=</span> max<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">,</span> n <span class="token operator">=</span> length<span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment"># Run with sample data</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> sample_data <span class="token operator"><-</span> c<span class="token punctuation">(</span>rnorm<span class="token punctuation">(</span><span class="token number">90</span><span class="token punctuation">)</span><span class="token punctuation">,</span> rnorm<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> mean <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">,</span> sd <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Some outliers</span> pipeline<span class="token operator">$</span>run<span class="token punctuation">(</span>sample_data<span class="token punctuation">)</span> <span class="token comment"># Get results</span> pipeline<span class="token operator">$</span>summary<span class="token punctuation">(</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>pipeline<span class="token operator">$</span>get_result<span class="token punctuation">(</span><span class="token string">"summary_stats"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 8: Lists vs Other Structures
Lists vs Vectors
|
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 |
<span class="token comment"># Vector - homogeneous</span> vec <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "double"</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 5</span> <span class="token comment"># List - heterogeneous</span> lst <span class="token operator"><-</span> list<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">"two"</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "list"</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 4</span> print<span class="token punctuation">(</span>str<span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Vector operations are faster</span> vec_time <span class="token operator"><-</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">1000</span><span class="token punctuation">)</span> vec <span class="token operator">*</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> list_time <span class="token operator"><-</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">1000</span><span class="token punctuation">)</span> lapply<span class="token punctuation">(</span>lst<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>is.numeric<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span> x <span class="token operator">*</span> <span class="token number">2</span> <span class="token keyword">else</span> x <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Vector time:"</span><span class="token punctuation">,</span> vec_time<span class="token punctuation">[</span><span class="token string">"elapsed"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"List time:"</span><span class="token punctuation">,</span> list_time<span class="token punctuation">[</span><span class="token string">"elapsed"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> |
Lists vs Data Frames
|
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 |
<span class="token comment"># Data frame - rectangular, each column same length</span> df <span class="token operator"><-</span> data.frame<span class="token punctuation">(</span> name <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"Alice"</span><span class="token punctuation">,</span> <span class="token string">"Bob"</span><span class="token punctuation">,</span> <span class="token string">"Charlie"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> age <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">35</span><span class="token punctuation">)</span><span class="token punctuation">,</span> stringsAsFactors <span class="token operator">=</span> <span class="token boolean">FALSE</span> <span class="token punctuation">)</span> <span class="token comment"># List - can have different lengths</span> lst <span class="token operator"><-</span> list<span class="token punctuation">(</span> name <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token string">"Alice"</span><span class="token punctuation">,</span> <span class="token string">"Bob"</span><span class="token punctuation">,</span> <span class="token string">"Charlie"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> age <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">35</span><span class="token punctuation">)</span><span class="token punctuation">,</span> scores <span class="token operator">=</span> list<span class="token punctuation">(</span> Alice <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">85</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Bob <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">78</span><span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">,</span> <span class="token number">95</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Charlie <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">90</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">"Data frame structure:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>str<span class="token punctuation">(</span>df<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span><span class="token string">"\nList structure:"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>str<span class="token punctuation">(</span>lst<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 9: Common Operations with Lists
Filtering Lists
|
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 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span> a <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">,</span> b <span class="token operator">=</span> letters<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> c <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 punctuation">,</span> d <span class="token operator">=</span> list<span class="token punctuation">(</span>x <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">,</span> y <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">,</span> e <span class="token operator">=</span> <span class="token number">100</span> <span class="token punctuation">)</span> <span class="token comment"># Filter by type</span> numeric_elements <span class="token operator"><-</span> my_list<span class="token punctuation">[</span>sapply<span class="token punctuation">(</span>my_list<span class="token punctuation">,</span> is.numeric<span class="token punctuation">)</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>numeric_elements<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Filter by length</span> long_elements <span class="token operator"><-</span> my_list<span class="token punctuation">[</span>sapply<span class="token punctuation">(</span>my_list<span class="token punctuation">,</span> length<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">2</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>long_elements<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Filter by condition</span> filtered <span class="token operator"><-</span> my_list<span class="token punctuation">[</span>sapply<span class="token punctuation">(</span>my_list<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>is.numeric<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span> mean<span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">10</span> <span class="token keyword">else</span> <span class="token boolean">FALSE</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>filtered<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Transforming Lists
|
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 |
numbers <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">3</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">4</span><span class="token operator">:</span><span class="token number">6</span><span class="token punctuation">,</span> c <span class="token operator">=</span> <span class="token number">7</span><span class="token operator">:</span><span class="token number">9</span><span class="token punctuation">)</span> <span class="token comment"># Apply function to each element</span> squared <span class="token operator"><-</span> lapply<span class="token punctuation">(</span>numbers<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> x<span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>squared<span class="token punctuation">)</span> <span class="token comment"># Modify names</span> names<span class="token punctuation">(</span>squared<span class="token punctuation">)</span> <span class="token operator"><-</span> toupper<span class="token punctuation">(</span>names<span class="token punctuation">(</span>squared<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>squared<span class="token punctuation">)</span> <span class="token comment"># Recursive transformation</span> nested <span class="token operator"><-</span> list<span class="token punctuation">(</span> x <span class="token operator">=</span> list<span class="token punctuation">(</span>y <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> z <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> a <span class="token operator">=</span> list<span class="token punctuation">(</span>b <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> c <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"># rapply for recursive apply</span> doubled <span class="token operator"><-</span> rapply<span class="token punctuation">(</span>nested<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> x <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">,</span> how <span class="token operator">=</span> <span class="token string">"replace"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>doubled<span class="token punctuation">)</span> |
Combining Lists
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
list1 <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> list2 <span class="token operator"><-</span> list<span class="token punctuation">(</span>c <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">,</span> d <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> list3 <span class="token operator"><-</span> list<span class="token punctuation">(</span>e <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">,</span> f <span class="token operator">=</span> <span class="token number">6</span><span class="token punctuation">)</span> <span class="token comment"># Combine multiple lists</span> combined <span class="token operator"><-</span> c<span class="token punctuation">(</span>list1<span class="token punctuation">,</span> list2<span class="token punctuation">,</span> list3<span class="token punctuation">)</span> print<span class="token punctuation">(</span>combined<span class="token punctuation">)</span> <span class="token comment"># Merge with replacement (later lists overwrite earlier)</span> merged <span class="token operator"><-</span> modifyList<span class="token punctuation">(</span>list1<span class="token punctuation">,</span> list2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>merged<span class="token punctuation">)</span> <span class="token comment"># For deep merge, need recursive = TRUE</span> deep1 <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> list<span class="token punctuation">(</span>x <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> y <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> deep2 <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> list<span class="token punctuation">(</span>z <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">4</span><span class="token punctuation">)</span> deep_merged <span class="token operator"><-</span> modifyList<span class="token punctuation">(</span>deep1<span class="token punctuation">,</span> deep2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>deep_merged<span class="token punctuation">)</span> |
Part 10: Common Mistakes and How to Avoid Them
Mistake 1: Confusing [ and [[
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token string">"hello"</span><span class="token punctuation">)</span> <span class="token comment"># ❌ Using [ when you want the element</span> result1 <span class="token operator"><-</span> my_list<span class="token punctuation">[</span><span class="token string">"a"</span><span class="token punctuation">]</span> <span class="token comment"># result1 * 2 # Error!</span> <span class="token comment"># ✅ Using [[ to get the actual element</span> result2 <span class="token operator"><-</span> my_list<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"a"</span><span class="token punctuation">]</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>result2 <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># Works fine</span> |
Mistake 2: Forgetting that Lists are Recursive
|
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"># ❌ unlist flattens everything</span> nested <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> list<span class="token punctuation">(</span>b <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> c <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> d <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> flattened <span class="token operator"><-</span> unlist<span class="token punctuation">(</span>nested<span class="token punctuation">)</span> print<span class="token punctuation">(</span>flattened<span class="token punctuation">)</span> <span class="token comment"># Loses structure</span> <span class="token comment"># ✅ Use recursive functions to maintain structure</span> process_nested <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>is.list<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> lapply<span class="token punctuation">(</span>x<span class="token punctuation">,</span> process_nested<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> x <span class="token operator">*</span> <span class="token number">2</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> doubled <span class="token operator"><-</span> process_nested<span class="token punctuation">(</span>nested<span class="token punctuation">)</span> print<span class="token punctuation">(</span>doubled<span class="token punctuation">)</span> |
Mistake 3: Assuming $ Works with Variables
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span>first_name <span class="token operator">=</span> <span class="token string">"Alice"</span><span class="token punctuation">,</span> last_name <span class="token operator">=</span> <span class="token string">"Smith"</span><span class="token punctuation">)</span> <span class="token comment"># ❌ $ doesn't work with variables</span> field <span class="token operator"><-</span> <span class="token string">"first_name"</span> <span class="token comment"># my_list$field # Returns NULL!</span> <span class="token comment"># ✅ Use [[ with variables</span> print<span class="token punctuation">(</span>my_list<span class="token punctuation">[</span><span class="token punctuation">[</span>field<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "Alice"</span> |
Mistake 4: Modifying Lists While Iterating
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> c <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># ❌ Dangerous - modifying while iterating</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>name <span class="token keyword">in</span> names<span class="token punctuation">(</span>my_list<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>my_list<span class="token punctuation">[</span><span class="token punctuation">[</span>name<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> my_list<span class="token punctuation">[</span><span class="token punctuation">[</span>name<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token keyword">NULL</span> <span class="token comment"># Changes list structure!</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment"># ✅ Better - create new list</span> my_list <span class="token operator"><-</span> list<span class="token punctuation">(</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> c <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> new_list <span class="token operator"><-</span> my_list<span class="token punctuation">[</span>my_list <span class="token operator">!=</span> <span class="token number">2</span><span class="token punctuation">]</span> <span class="token comment"># Filter</span> print<span class="token punctuation">(</span>new_list<span class="token punctuation">)</span> |
Part 11: Performance Considerations
Pre-allocating Lists
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
n <span class="token operator"><-</span> <span class="token number">10000</span> <span class="token comment"># ❌ Growing list in loop (slow)</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result <span class="token operator"><-</span> list<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>n<span class="token punctuation">)</span> <span class="token punctuation">{</span> result<span class="token punctuation">[</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator"><-</span> i<span class="token operator">^</span><span class="token number">2</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment"># ✅ Pre-allocate (faster)</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result <span class="token operator"><-</span> vector<span class="token punctuation">(</span><span class="token string">"list"</span><span class="token punctuation">,</span> n<span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>i <span class="token keyword">in</span> <span class="token number">1</span><span class="token operator">:</span>n<span class="token punctuation">)</span> <span class="token punctuation">{</span> result<span class="token punctuation">[</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator"><-</span> i<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> |
Using List for Lookup Tables
|
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 lookup table</span> lookup <span class="token operator"><-</span> list<span class="token punctuation">(</span> <span class="token string">"AAPL"</span> <span class="token operator">=</span> <span class="token string">"Apple Inc."</span><span class="token punctuation">,</span> <span class="token string">"GOOGL"</span> <span class="token operator">=</span> <span class="token string">"Alphabet Inc."</span><span class="token punctuation">,</span> <span class="token string">"MSFT"</span> <span class="token operator">=</span> <span class="token string">"Microsoft Corp."</span><span class="token punctuation">,</span> <span class="token string">"AMZN"</span> <span class="token operator">=</span> <span class="token string">"Amazon.com Inc."</span> <span class="token punctuation">)</span> <span class="token comment"># Fast O(1) lookup</span> get_company_name <span class="token operator"><-</span> <span class="token keyword">function</span><span class="token punctuation">(</span>symbol<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>symbol <span class="token percent-operator operator">%in%</span> names<span class="token punctuation">(</span>lookup<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> return<span class="token punctuation">(</span>lookup<span class="token punctuation">[</span><span class="token punctuation">[</span>symbol<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> return<span class="token punctuation">(</span><span class="token string">"Unknown"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> print<span class="token punctuation">(</span>get_company_name<span class="token punctuation">(</span><span class="token string">"AAPL"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>get_company_name<span class="token punctuation">(</span><span class="token string">"TSLA"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> |
Summary: The List Philosophy
Lists are your ultimate Swiss Army knife for data storage in R. Master these concepts:
Creating lists:
-
list()for basic lists -
Named elements for clarity
-
Nested lists for hierarchies
-
vector("list", n)for pre-allocation
Accessing elements:
-
$for named elements -
[[ ]]to get the element -
[ ]to get a sublist
Manipulating lists:
-
Add with
$,[[ ]], orc() -
Remove by setting to
NULL -
Modify by reassigning
Key functions:
-
lapply(),sapply()for applying functions -
unlist()to flatten -
str()to see structure -
names()to get/set names
Best practices:
-
Use names for readability
-
Understand the difference between
[and[[ -
Pre-allocate for large lists
-
Be careful with recursion
-
Use lists for heterogeneous data
Lists are what make R flexible enough to handle any data structure you can imagine. They’re the foundation of many advanced R objects, including data frames, model outputs, and complex nested data from APIs and JSON.
Would you like me to elaborate on any specific aspect of lists or explore more advanced list operations?
