Chapter 29: R Vectors
Part 1: What is a Vector?
A vector is a basic data structure in R that contains elements of the same type. The most important characteristic of a vector is that all elements must be the same data type (all numbers, all characters, all logical values, etc.).
The Six Types of Vectors
R has six fundamental types of vectors:
-
Numeric (double) – decimal numbers
-
Integer – whole numbers
-
Character – text strings
-
Logical – TRUE/FALSE values
-
Complex – complex numbers
-
Raw – raw bytes
But for everyday use, you’ll primarily work with numeric, character, and logical vectors.
Part 2: Creating Vectors
The c() Function – Combine
The most common way to create vectors is with the c() function (combine):
|
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"># Numeric vectors</span> numbers <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>numbers<span class="token punctuation">)</span> <span class="token comment"># With decimals</span> prices <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">19.99</span><span class="token punctuation">,</span> <span class="token number">24.50</span><span class="token punctuation">,</span> <span class="token number">9.99</span><span class="token punctuation">,</span> <span class="token number">49.95</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>prices<span class="token punctuation">)</span> <span class="token comment"># Integer vectors (use L to specify integer)</span> ages <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">25L</span><span class="token punctuation">,</span> <span class="token number">30L</span><span class="token punctuation">,</span> <span class="token number">35L</span><span class="token punctuation">,</span> <span class="token number">28L</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>ages<span class="token punctuation">)</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>ages<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "integer"</span> <span class="token comment"># Character vectors</span> names <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Alice"</span><span class="token punctuation">,</span> <span class="token string">"Bob"</span><span class="token punctuation">,</span> <span class="token string">"Charlie"</span><span class="token punctuation">,</span> <span class="token string">"Diana"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>names<span class="token punctuation">)</span> <span class="token comment"># Logical vectors</span> results <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>results<span class="token punctuation">)</span> <span class="token comment"># Mixed types (will be coerced - more on this later)</span> mixed <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 string">"three"</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mixed<span class="token punctuation">)</span> <span class="token comment"># All become characters: "1" "2" "three" "TRUE"</span> |
Sequence Creation
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token comment"># Using colon operator</span> vec1 <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">10</span> <span class="token comment"># 1,2,3,4,5,6,7,8,9,10</span> vec2 <span class="token operator"><-</span> <span class="token number">10</span><span class="token operator">:</span><span class="token number">1</span> <span class="token comment"># 10,9,8,7,6,5,4,3,2,1</span> vec3 <span class="token operator"><-</span> <span class="token operator">-</span><span class="token number">5</span><span class="token operator">:</span><span class="token number">5</span> <span class="token comment"># -5,-4,-3,-2,-1,0,1,2,3,4,5</span> print<span class="token punctuation">(</span>vec1<span class="token punctuation">)</span> print<span class="token punctuation">(</span>vec2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>vec3<span class="token punctuation">)</span> <span class="token comment"># Using seq() function (more flexible)</span> seq1 <span class="token operator"><-</span> seq<span class="token punctuation">(</span>from <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> to <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">,</span> by <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># 1,3,5,7,9</span> seq2 <span class="token operator"><-</span> seq<span class="token punctuation">(</span>from <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> to <span class="token operator">=</span> <span class="token number">100</span><span class="token punctuation">,</span> length.out <span class="token operator">=</span> <span class="token number">5</span><span class="token punctuation">)</span> <span class="token comment"># 0,25,50,75,100</span> seq3 <span class="token operator"><-</span> seq<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">0.5</span><span class="token punctuation">)</span> <span class="token comment"># 1.0,1.5,2.0,...,10.0</span> print<span class="token punctuation">(</span>seq1<span class="token punctuation">)</span> print<span class="token punctuation">(</span>seq2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>seq3<span class="token punctuation">)</span> |
Repetition
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<span class="token comment"># Using rep() function</span> rep1 <span class="token operator"><-</span> rep<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> times <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token comment"># 5 repeated 10 times</span> rep2 <span class="token operator"><-</span> rep<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> times <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># 1,2,3 repeated 3 times</span> rep3 <span class="token operator"><-</span> rep<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> each <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># Each element repeated 3 times</span> rep4 <span class="token operator"><-</span> rep<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> length.out <span class="token operator">=</span> <span class="token number">7</span><span class="token punctuation">)</span> <span class="token comment"># Repeat until length 7</span> print<span class="token punctuation">(</span>rep1<span class="token punctuation">)</span> print<span class="token punctuation">(</span>rep2<span class="token punctuation">)</span> print<span class="token punctuation">(</span>rep3<span class="token punctuation">)</span> print<span class="token punctuation">(</span>rep4<span class="token punctuation">)</span> <span class="token comment"># Complex repetitions</span> rep5 <span class="token operator"><-</span> rep<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> times <span class="token operator">=</span> c<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 twice, 2 five times, 3 three times</span> print<span class="token punctuation">(</span>rep5<span class="token punctuation">)</span> |
Part 3: Vector Properties
Length and Type
|
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 |
my_vector <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">40</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">)</span> <span class="token comment"># Length - how many elements</span> print<span class="token punctuation">(</span>length<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 5</span> <span class="token comment"># Type of elements</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "double" (numeric)</span> print<span class="token punctuation">(</span>class<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "numeric"</span> print<span class="token punctuation">(</span>mode<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "numeric"</span> <span class="token comment"># Check if vector</span> print<span class="token punctuation">(</span>is.vector<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE</span> <span class="token comment"># Check specific types</span> print<span class="token punctuation">(</span>is.numeric<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE</span> print<span class="token punctuation">(</span>is.character<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># FALSE</span> print<span class="token punctuation">(</span>is.logical<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># FALSE</span> print<span class="token punctuation">(</span>is.integer<span class="token punctuation">(</span>my_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># FALSE (it's double)</span> <span class="token comment"># Names</span> named_vector <span class="token operator"><-</span> c<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> c <span class="token operator">=</span> <span class="token number">30</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>names<span class="token punctuation">(</span>named_vector<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Attributes
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vec <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 comment"># Add names attribute</span> names<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"one"</span><span class="token punctuation">,</span> <span class="token string">"two"</span><span class="token punctuation">,</span> <span class="token string">"three"</span><span class="token punctuation">,</span> <span class="token string">"four"</span><span class="token punctuation">,</span> <span class="token string">"five"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> print<span class="token punctuation">(</span>attributes<span class="token punctuation">(</span>vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Remove names</span> names<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> <span class="token operator"><-</span> <span class="token keyword">NULL</span> print<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> |
Part 4: Accessing Vector Elements
Indexing (1-based!)
R uses 1-based indexing, meaning the first element is at position 1:
|
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 |
fruits <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"apple"</span><span class="token punctuation">,</span> <span class="token string">"banana"</span><span class="token punctuation">,</span> <span class="token string">"orange"</span><span class="token punctuation">,</span> <span class="token string">"grape"</span><span class="token punctuation">,</span> <span class="token string">"mango"</span><span class="token punctuation">)</span> <span class="token comment"># Single element</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "apple"</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "orange"</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "mango"</span> <span class="token comment"># Multiple elements (by position)</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">[</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "apple" "orange" "mango"</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">[</span><span class="token number">2</span><span class="token operator">:</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "banana" "orange" "grape"</span> <span class="token comment"># Negative indices (exclude)</span> print<span class="token punctuation">(</span>fruits<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> <span class="token comment"># All except "banana"</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">[</span><span class="token operator">-</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># All except first and last</span> <span class="token comment"># By logical vector</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">[</span>c<span class="token punctuation">(</span><span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># "apple" "orange" "mango"</span> <span class="token comment"># By condition</span> numbers <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">,</span> <span class="token number">35</span><span class="token punctuation">,</span> <span class="token number">40</span><span class="token punctuation">,</span> <span class="token number">55</span><span class="token punctuation">,</span> <span class="token number">60</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>numbers<span class="token punctuation">[</span>numbers <span class="token operator">></span> <span class="token number">30</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 35 40 55 60</span> print<span class="token punctuation">(</span>numbers<span class="token punctuation">[</span>numbers <span class="token percent-operator operator">%%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 10 40 60</span> <span class="token comment"># Named vectors</span> student <span class="token operator"><-</span> c<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 string">"25"</span><span class="token punctuation">,</span> grade <span class="token operator">=</span> <span class="token string">"A"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>student<span class="token punctuation">[</span><span class="token string">"name"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>student<span class="token punctuation">[</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> print<span class="token punctuation">(</span>student<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">"grade"</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> |
The Difference Between [ and [[
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
named_vec <span class="token operator"><-</span> c<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> c <span class="token operator">=</span> <span class="token number">30</span><span class="token punctuation">)</span> <span class="token comment"># [ returns a vector (possibly of length 1)</span> result1 <span class="token operator"><-</span> named_vec<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"># "double" - still a vector</span> <span class="token comment"># [[ returns the element itself</span> result2 <span class="token operator"><-</span> named_vec<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" - but it's a single number</span> <span class="token comment"># Practical difference</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>length<span class="token punctuation">(</span>result2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 (same here, but with lists it matters)</span> |
Part 5: Vector Operations
Arithmetic Operations
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
v1 <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> v2 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span> <span class="token comment"># Element-wise operations</span> print<span class="token punctuation">(</span>v1 <span class="token operator">+</span> v2<span class="token punctuation">)</span> <span class="token comment"># 6 8 10 12</span> print<span class="token punctuation">(</span>v1 <span class="token operator">-</span> v2<span class="token punctuation">)</span> <span class="token comment"># -4 -4 -4 -4</span> print<span class="token punctuation">(</span>v1 <span class="token operator">*</span> v2<span class="token punctuation">)</span> <span class="token comment"># 5 12 21 32</span> print<span class="token punctuation">(</span>v1 <span class="token operator">/</span> v2<span class="token punctuation">)</span> <span class="token comment"># 0.2 0.333 0.429 0.5</span> print<span class="token punctuation">(</span>v1<span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># 1 4 9 16</span> <span class="token comment"># Scalar operations (vector + single number)</span> print<span class="token punctuation">(</span>v1 <span class="token operator">+</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token comment"># 11 12 13 14</span> print<span class="token punctuation">(</span>v1 <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># 2 4 6 8</span> |
Recycling
When vectors have different lengths, R recycles the shorter vector:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
v1 <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> <span class="token number">6</span><span class="token punctuation">)</span> v2 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token comment"># v2 is recycled to match length of v1: c(10,20,10,20,10,20)</span> print<span class="token punctuation">(</span>v1 <span class="token operator">+</span> v2<span class="token punctuation">)</span> <span class="token comment"># 11 22 13 24 15 26</span> <span class="token comment"># Works with scalars too (scalar recycled to match)</span> print<span class="token punctuation">(</span>v1 <span class="token operator">*</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># 3 6 9 12 15 18</span> <span class="token comment"># Warning when length not multiple</span> v3 <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> v4 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>v3 <span class="token operator">+</span> v4<span class="token punctuation">)</span> <span class="token comment"># 11 22 13 with warning</span> |
Comparison Operations
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 number">95</span><span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">)</span> <span class="token comment"># Comparisons return logical vectors</span> print<span class="token punctuation">(</span>scores <span class="token operator">></span> <span class="token number">90</span><span class="token punctuation">)</span> <span class="token comment"># FALSE TRUE FALSE TRUE FALSE</span> print<span class="token punctuation">(</span>scores <span class="token operator">>=</span> <span class="token number">85</span><span class="token punctuation">)</span> <span class="token comment"># TRUE TRUE FALSE TRUE TRUE</span> print<span class="token punctuation">(</span>scores <span class="token operator">==</span> <span class="token number">92</span><span class="token punctuation">)</span> <span class="token comment"># FALSE TRUE FALSE FALSE FALSE</span> print<span class="token punctuation">(</span>scores <span class="token operator">!=</span> <span class="token number">85</span><span class="token punctuation">)</span> <span class="token comment"># FALSE TRUE TRUE TRUE TRUE</span> <span class="token comment"># Use these for filtering</span> high_scores <span class="token operator"><-</span> scores<span class="token punctuation">[</span>scores <span class="token operator">></span> <span class="token number">90</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>high_scores<span class="token punctuation">)</span> <span class="token comment"># 92 95</span> |
Mathematical Functions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
numbers <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">,</span> <span class="token number">16</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span> <span class="token comment"># Basic statistics</span> print<span class="token punctuation">(</span>sum<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 55</span> print<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 11</span> print<span class="token punctuation">(</span>median<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 9</span> print<span class="token punctuation">(</span>sd<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 9.67</span> print<span class="token punctuation">(</span>var<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 93.5</span> print<span class="token punctuation">(</span>min<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1</span> print<span class="token punctuation">(</span>max<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 25</span> print<span class="token punctuation">(</span>range<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 25</span> <span class="token comment"># Mathematical transformations</span> print<span class="token punctuation">(</span>sqrt<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 2 3 4 5</span> print<span class="token punctuation">(</span>log<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Natural log</span> print<span class="token punctuation">(</span>log10<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Log base 10</span> print<span class="token punctuation">(</span>exp<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Exponential</span> <span class="token comment"># Rounding</span> prices <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">19.99</span><span class="token punctuation">,</span> <span class="token number">24.50</span><span class="token punctuation">,</span> <span class="token number">9.99</span><span class="token punctuation">,</span> <span class="token number">49.95</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>prices<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 20 25 10 50</span> print<span class="token punctuation">(</span>floor<span class="token punctuation">(</span>prices<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 19 24 9 49</span> print<span class="token punctuation">(</span>ceiling<span class="token punctuation">(</span>prices<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 20 25 10 50</span> |
Vectorized Functions
One of R’s greatest strengths is that most functions are vectorized – they operate on entire vectors at once:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token comment"># String operations</span> names <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> print<span class="token punctuation">(</span>toupper<span class="token punctuation">(</span>names<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "ALICE" "BOB" "CHARLIE"</span> print<span class="token punctuation">(</span>nchar<span class="token punctuation">(</span>names<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 5 3 7</span> print<span class="token punctuation">(</span>paste<span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> names<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "Hello alice" "Hello bob" "Hello charlie"</span> <span class="token comment"># More complex vectorized operations</span> x <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span> y <span class="token operator"><-</span> <span class="token number">6</span><span class="token operator">:</span><span class="token number">10</span> z <span class="token operator"><-</span> <span class="token number">11</span><span class="token operator">:</span><span class="token number">15</span> result <span class="token operator"><-</span> sqrt<span class="token punctuation">(</span>x<span class="token operator">^</span><span class="token number">2</span> <span class="token operator">+</span> y<span class="token operator">^</span><span class="token number">2</span> <span class="token operator">+</span> z<span class="token operator">^</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># All done element-wise</span> print<span class="token punctuation">(</span>result<span class="token punctuation">)</span> |
Part 6: Modifying Vectors
Changing Elements
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
fruits <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"apple"</span><span class="token punctuation">,</span> <span class="token string">"banana"</span><span class="token punctuation">,</span> <span class="token string">"orange"</span><span class="token punctuation">,</span> <span class="token string">"grape"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> <span class="token comment"># Change single element</span> fruits<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token string">"kiwi"</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> <span class="token comment"># "apple" "kiwi" "orange" "grape"</span> <span class="token comment"># Change multiple elements</span> fruits<span class="token punctuation">[</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"pear"</span><span class="token punctuation">,</span> <span class="token string">"mango"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> <span class="token comment"># "pear" "kiwi" "mango" "grape"</span> <span class="token comment"># Add elements</span> fruits<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token string">"lemon"</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> <span class="token comment"># Now length 5</span> <span class="token comment"># Append using c()</span> fruits <span class="token operator"><-</span> c<span class="token punctuation">(</span>fruits<span class="token punctuation">,</span> <span class="token string">"lime"</span><span class="token punctuation">,</span> <span class="token string">"cherry"</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> <span class="token comment"># Insert at specific position (trickier)</span> fruits <span class="token operator"><-</span> c<span class="token punctuation">(</span>fruits<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> <span class="token string">"pineapple"</span><span class="token punctuation">,</span> fruits<span class="token punctuation">[</span><span class="token number">4</span><span class="token operator">:</span>length<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> |
Removing Elements
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
numbers <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">10</span> <span class="token comment"># Remove by position</span> numbers <span class="token operator"><-</span> numbers<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token comment"># Remove 5th element</span> print<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> <span class="token comment"># Remove multiple</span> numbers <span class="token operator"><-</span> numbers<span class="token punctuation">[</span><span class="token operator">-</span>c<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> <span class="token comment"># Remove by condition</span> numbers <span class="token operator"><-</span> numbers<span class="token punctuation">[</span>numbers <span class="token operator"><</span> <span class="token number">8</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> <span class="token comment"># Keep only specific elements</span> numbers <span class="token operator"><-</span> numbers<span class="token punctuation">[</span>numbers <span class="token percent-operator operator">%%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">]</span> <span class="token comment"># Keep only even</span> print<span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> |
Part 7: Vector Functions and Utilities
Set Operations
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
v1 <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> v2 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span> <span class="token comment"># Union - all unique elements</span> print<span class="token punctuation">(</span>union<span class="token punctuation">(</span>v1<span class="token punctuation">,</span> v2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 2 3 4 5 6 7 8</span> <span class="token comment"># Intersection - common elements</span> print<span class="token punctuation">(</span>intersect<span class="token punctuation">(</span>v1<span class="token punctuation">,</span> v2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 4 5</span> <span class="token comment"># Set difference - in v1 but not in v2</span> print<span class="token punctuation">(</span>setdiff<span class="token punctuation">(</span>v1<span class="token punctuation">,</span> v2<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 2 3</span> <span class="token comment"># Check if element is in vector</span> print<span class="token punctuation">(</span><span class="token number">3</span> <span class="token percent-operator operator">%in%</span> v1<span class="token punctuation">)</span> <span class="token comment"># TRUE</span> print<span class="token punctuation">(</span><span class="token number">10</span> <span class="token percent-operator operator">%in%</span> v1<span class="token punctuation">)</span> <span class="token comment"># FALSE</span> <span class="token comment"># Check if all/some elements are in another vector</span> print<span class="token punctuation">(</span>all<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token percent-operator operator">%in%</span> v1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE</span> print<span class="token punctuation">(</span>all<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span> <span class="token percent-operator operator">%in%</span> v1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># FALSE</span> print<span class="token punctuation">(</span>any<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span> <span class="token percent-operator operator">%in%</span> v1<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE</span> |
Sorting and Ordering
|
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 |
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 number">95</span><span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">,</span> <span class="token number">70</span><span class="token punctuation">)</span> <span class="token comment"># Sort the vector</span> print<span class="token punctuation">(</span>sort<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Ascending</span> print<span class="token punctuation">(</span>sort<span class="token punctuation">(</span>scores<span class="token punctuation">,</span> decreasing <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Descending</span> <span class="token comment"># Get order (indices that would sort the vector)</span> print<span class="token punctuation">(</span>order<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 6 3 1 5 2 4</span> <span class="token comment"># Use order to sort one vector by another</span> names <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Alice"</span><span class="token punctuation">,</span> <span class="token string">"Bob"</span><span class="token punctuation">,</span> <span class="token string">"Charlie"</span><span class="token punctuation">,</span> <span class="token string">"Diana"</span><span class="token punctuation">)</span> ages <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 number">28</span><span class="token punctuation">)</span> <span class="token comment"># Sort names by age</span> sorted_names <span class="token operator"><-</span> names<span class="token punctuation">[</span>order<span class="token punctuation">(</span>ages<span class="token punctuation">)</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>sorted_names<span class="token punctuation">)</span> <span class="token comment"># Reverse</span> print<span class="token punctuation">(</span>rev<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Reverse order</span> |
Unique and Duplicated
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">3</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">4</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token comment"># Unique values</span> print<span class="token punctuation">(</span>unique<span class="token punctuation">(</span>vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 2 3 4</span> <span class="token comment"># Which elements are duplicates?</span> print<span class="token punctuation">(</span>duplicated<span class="token punctuation">(</span>vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE</span> <span class="token comment"># Count frequency</span> print<span class="token punctuation">(</span>table<span class="token punctuation">(</span>vec<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Sampling and Randomization
|
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"># Sample from vector</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> <span class="token comment"># For reproducibility</span> vec <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span><span class="token number">100</span> <span class="token comment"># Random sample (without replacement)</span> sample1 <span class="token operator"><-</span> sample<span class="token punctuation">(</span>vec<span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>sample1<span class="token punctuation">)</span> <span class="token comment"># Random sample (with replacement)</span> sample2 <span class="token operator"><-</span> sample<span class="token punctuation">(</span>vec<span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> replace <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>sample2<span class="token punctuation">)</span> <span class="token comment"># Shuffle the whole vector</span> shuffled <span class="token operator"><-</span> sample<span class="token punctuation">(</span>vec<span class="token punctuation">)</span> print<span class="token punctuation">(</span>head<span class="token punctuation">(</span>shuffled<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Part 8: Special Vector Types
Integer Vectors
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment"># Create integer vectors (use L suffix)</span> int_vec <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">1L</span><span class="token punctuation">,</span> <span class="token number">2L</span><span class="token punctuation">,</span> <span class="token number">3L</span><span class="token punctuation">,</span> <span class="token number">4L</span><span class="token punctuation">,</span> <span class="token number">5L</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>typeof<span class="token punctuation">(</span>int_vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "integer"</span> <span class="token comment"># Convert to integer</span> num_vec <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">1.5</span><span class="token punctuation">,</span> <span class="token number">2.7</span><span class="token punctuation">,</span> <span class="token number">3.2</span><span class="token punctuation">)</span> int_vec2 <span class="token operator"><-</span> as.integer<span class="token punctuation">(</span>num_vec<span class="token punctuation">)</span> print<span class="token punctuation">(</span>int_vec2<span class="token punctuation">)</span> <span class="token comment"># 1 2 3 (truncates)</span> |
Logical Vectors
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token comment"># Create logical vectors</span> log_vec <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> <span class="token comment"># Logical operations</span> print<span class="token punctuation">(</span><span class="token operator">!</span>log_vec<span class="token punctuation">)</span> <span class="token comment"># FALSE TRUE FALSE FALSE</span> print<span class="token punctuation">(</span>log_vec <span class="token operator">&</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> <span class="token comment"># TRUE FALSE TRUE TRUE</span> print<span class="token punctuation">(</span>log_vec <span class="token operator">|</span> <span class="token boolean">FALSE</span><span class="token punctuation">)</span> <span class="token comment"># TRUE FALSE TRUE TRUE</span> <span class="token comment"># Which indices are TRUE?</span> print<span class="token punctuation">(</span>which<span class="token punctuation">(</span>log_vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 1 3 4</span> <span class="token comment"># Count TRUE</span> print<span class="token punctuation">(</span>sum<span class="token punctuation">(</span>log_vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 3</span> <span class="token comment"># Any/all</span> print<span class="token punctuation">(</span>any<span class="token punctuation">(</span>log_vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># TRUE</span> print<span class="token punctuation">(</span>all<span class="token punctuation">(</span>log_vec<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># FALSE</span> |
Character Vectors
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
text <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> <span class="token string">"World"</span><span class="token punctuation">,</span> <span class="token string">"R"</span><span class="token punctuation">,</span> <span class="token string">"Programming"</span><span class="token punctuation">)</span> <span class="token comment"># String operations</span> print<span class="token punctuation">(</span>nchar<span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 5 5 1 11</span> print<span class="token punctuation">(</span>toupper<span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Uppercase</span> print<span class="token punctuation">(</span>tolower<span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Lowercase</span> <span class="token comment"># Substring</span> print<span class="token punctuation">(</span>substr<span class="token punctuation">(</span>text<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "Hel" "Wor" "R" "Pro"</span> <span class="token comment"># Paste</span> print<span class="token punctuation">(</span>paste<span class="token punctuation">(</span>text<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 comment"># "Hello World R Programming"</span> print<span class="token punctuation">(</span>paste<span class="token punctuation">(</span><span class="token string">"Prefix"</span><span class="token punctuation">,</span> text<span class="token punctuation">,</span> sep <span class="token operator">=</span> <span class="token string">"-"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># "Prefix-Hello" ...</span> <span class="token comment"># Grep - pattern matching</span> print<span class="token punctuation">(</span>grep<span class="token punctuation">(</span><span class="token string">"r"</span><span class="token punctuation">,</span> text<span class="token punctuation">,</span> ignore.case <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Which indices have "r"?</span> |
Factor Vectors (special)
|
0 1 2 3 4 5 6 7 8 9 10 |
<span class="token comment"># Factors are vectors that represent categorical data</span> colors <span class="token operator"><-</span> factor<span class="token punctuation">(</span>c<span class="token punctuation">(</span><span class="token string">"red"</span><span class="token punctuation">,</span> <span class="token string">"blue"</span><span class="token punctuation">,</span> <span class="token string">"green"</span><span class="token punctuation">,</span> <span class="token string">"red"</span><span class="token punctuation">,</span> <span class="token string">"blue"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>colors<span class="token punctuation">)</span> print<span class="token punctuation">(</span>levels<span class="token punctuation">(</span>colors<span class="token punctuation">)</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>as.integer<span class="token punctuation">(</span>colors<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Underlying integer codes</span> |
Part 9: Missing Values (NA)
|
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 |
<span class="token comment"># Vectors can contain missing values</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 keyword">NA</span><span class="token punctuation">,</span> <span class="token number">78</span><span class="token punctuation">,</span> <span class="token number">95</span><span class="token punctuation">,</span> <span class="token keyword">NA</span><span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>scores<span class="token punctuation">)</span> <span class="token comment"># Check for missing values</span> print<span class="token punctuation">(</span>is.na<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Count missing</span> print<span class="token punctuation">(</span>sum<span class="token punctuation">(</span>is.na<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Remove missing</span> clean_scores <span class="token operator"><-</span> scores<span class="token punctuation">[</span><span class="token operator">!</span>is.na<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>clean_scores<span class="token punctuation">)</span> <span class="token comment"># Functions with NA</span> print<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># NA</span> print<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>scores<span class="token punctuation">,</span> na.rm <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 86.5</span> <span class="token comment"># Replace NA with value</span> scores<span class="token punctuation">[</span>is.na<span class="token punctuation">(</span>scores<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator"><-</span> <span class="token number">0</span> print<span class="token punctuation">(</span>scores<span class="token punctuation">)</span> |
Part 10: Practical Examples
Example 1: Grade Calculator
|
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 |
<span class="token comment"># Student grades</span> homework <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 number">95</span><span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">)</span> quizzes <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 number">85</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">)</span> final_exam <span class="token operator"><-</span> <span class="token number">87</span> <span class="token comment"># Calculate weighted average</span> hw_weight <span class="token operator"><-</span> <span class="token number">0.4</span> quiz_weight <span class="token operator"><-</span> <span class="token number">0.3</span> final_weight <span class="token operator"><-</span> <span class="token number">0.3</span> hw_avg <span class="token operator"><-</span> mean<span class="token punctuation">(</span>homework<span class="token punctuation">)</span> quiz_avg <span class="token operator"><-</span> mean<span class="token punctuation">(</span>quizzes<span class="token punctuation">)</span> final_grade <span class="token operator"><-</span> hw_avg <span class="token operator">*</span> hw_weight <span class="token operator">+</span> quiz_avg <span class="token operator">*</span> quiz_weight <span class="token operator">+</span> final_exam <span class="token operator">*</span> final_weight <span class="token comment"># Assign letter grade</span> grade_cutoffs <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 number">80</span><span class="token punctuation">,</span> <span class="token number">70</span><span class="token punctuation">,</span> <span class="token number">60</span><span class="token punctuation">)</span> letter_grades <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token string">"A"</span><span class="token punctuation">,</span> <span class="token string">"B"</span><span class="token punctuation">,</span> <span class="token string">"C"</span><span class="token punctuation">,</span> <span class="token string">"D"</span><span class="token punctuation">,</span> <span class="token string">"F"</span><span class="token punctuation">)</span> letter_grade <span class="token operator"><-</span> letter_grades<span class="token punctuation">[</span>sum<span class="token punctuation">(</span>final_grade <span class="token operator"><</span> grade_cutoffs<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">]</span> cat<span class="token punctuation">(</span><span class="token string">"Final Grade:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>final_grade<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">"-"</span><span class="token punctuation">,</span> letter_grade<span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token comment"># Class statistics</span> all_grades <span class="token operator"><-</span> c<span class="token punctuation">(</span>homework<span class="token punctuation">,</span> quizzes<span class="token punctuation">,</span> final_exam<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Class Statistics:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Mean:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>all_grades<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Median:"</span><span class="token punctuation">,</span> median<span class="token punctuation">(</span>all_grades<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Range:"</span><span class="token punctuation">,</span> min<span class="token punctuation">(</span>all_grades<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"-"</span><span class="token punctuation">,</span> max<span class="token punctuation">(</span>all_grades<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">" SD:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>sd<span class="token punctuation">(</span>all_grades<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> |
Example 2: Stock Price Analysis
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<span class="token comment"># Simulate stock prices</span> set.seed<span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span> days <span class="token operator"><-</span> <span class="token number">30</span> prices <span class="token operator"><-</span> <span class="token number">100</span> <span class="token operator">+</span> cumsum<span class="token punctuation">(</span>rnorm<span class="token punctuation">(</span>days<span class="token punctuation">,</span> mean <span class="token operator">=</span> <span class="token number">0.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> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>prices<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Daily returns</span> returns <span class="token operator"><-</span> diff<span class="token punctuation">(</span>prices<span class="token punctuation">)</span> <span class="token operator">/</span> prices<span class="token punctuation">[</span><span class="token operator">-</span>length<span class="token punctuation">(</span>prices<span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token number">100</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>returns<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Statistics</span> cat<span class="token punctuation">(</span><span class="token string">"Price Statistics:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Start: $"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>prices<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">2</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">" End: $"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>prices<span class="token punctuation">[</span>length<span class="token punctuation">(</span>prices<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" High: $"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>max<span class="token punctuation">(</span>prices<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Low: $"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>min<span class="token punctuation">(</span>prices<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Volatility (SD of returns):"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>sd<span class="token punctuation">(</span>returns<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"%\n"</span><span class="token punctuation">)</span> <span class="token comment"># Moving average</span> window <span class="token operator"><-</span> <span class="token number">5</span> ma <span class="token operator"><-</span> numeric<span class="token punctuation">(</span>length<span class="token punctuation">(</span>prices<span class="token punctuation">)</span> <span class="token operator">-</span> window <span class="token operator">+</span> <span class="token number">1</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>length<span class="token punctuation">(</span>ma<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ma<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><-</span> mean<span class="token punctuation">(</span>prices<span class="token punctuation">[</span>i<span class="token operator">:</span><span class="token punctuation">(</span>i <span class="token operator">+</span> window <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> print<span class="token punctuation">(</span>round<span class="token punctuation">(</span>ma<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Trading signals</span> buy_signal <span class="token operator"><-</span> prices <span class="token operator">></span> ma cat<span class="token punctuation">(</span><span class="token string">"Buy signals on days:"</span><span class="token punctuation">,</span> which<span class="token punctuation">(</span>buy_signal<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> |
Example 3: Text Analysis
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="token comment"># Sample text</span> text <span class="token operator"><-</span> <span class="token string">"The quick brown fox jumps over the lazy dog. The dog sleeps while the fox runs."</span> <span class="token comment"># Split into words</span> words <span class="token operator"><-</span> strsplit<span class="token punctuation">(</span>tolower<span class="token punctuation">(</span>text<span class="token punctuation">)</span><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> print<span class="token punctuation">(</span>words<span class="token punctuation">)</span> <span class="token comment"># Word frequencies</span> unique_words <span class="token operator"><-</span> unique<span class="token punctuation">(</span>words<span class="token punctuation">)</span> frequencies <span class="token operator"><-</span> sapply<span class="token punctuation">(</span>unique_words<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>w<span class="token punctuation">)</span> sum<span class="token punctuation">(</span>words <span class="token operator">==</span> w<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Sort by frequency</span> sorted_idx <span class="token operator"><-</span> order<span class="token punctuation">(</span>frequencies<span class="token punctuation">,</span> decreasing <span class="token operator">=</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Word frequencies:\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> sorted_idx<span class="token punctuation">[</span><span class="token number">1</span><span class="token operator">:</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> cat<span class="token punctuation">(</span><span class="token string">" "</span><span class="token punctuation">,</span> unique_words<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">":"</span><span class="token punctuation">,</span> frequencies<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment"># Word lengths</span> word_lengths <span class="token operator"><-</span> nchar<span class="token punctuation">(</span>words<span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">"Word length statistics:\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Min:"</span><span class="token punctuation">,</span> min<span class="token punctuation">(</span>word_lengths<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">" Max:"</span><span class="token punctuation">,</span> max<span class="token punctuation">(</span>word_lengths<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">" Mean:"</span><span class="token punctuation">,</span> round<span class="token punctuation">(</span>mean<span class="token punctuation">(</span>word_lengths<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> cat<span class="token punctuation">(</span><span class="token string">" Median:"</span><span class="token punctuation">,</span> median<span class="token punctuation">(</span>word_lengths<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span><span class="token punctuation">)</span> |
Part 11: Common Mistakes and How to Avoid Them
Mistake 1: 0-based Indexing
|
0 1 2 3 4 5 6 7 8 9 10 11 |
<span class="token comment"># ❌ Python/Java programmers often do this</span> vec <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">40</span><span class="token punctuation">)</span> <span class="token comment"># vec[0] # Returns numeric(0) - empty vector!</span> <span class="token comment"># ✅ R uses 1-based indexing</span> print<span class="token punctuation">(</span>vec<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 10</span> |
Mistake 2: Forgetting that Vectors are Homogeneous
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token comment"># ❌ This will coerce all elements to character</span> mixed <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 string">"three"</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>mixed<span class="token punctuation">)</span> <span class="token comment"># "1" "2" "three" "TRUE"</span> <span class="token comment"># ✅ Keep different types in lists</span> proper_list <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 number">2</span><span class="token punctuation">,</span> <span class="token string">"three"</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>proper_list<span class="token punctuation">)</span> |
Mistake 3: Using = instead of == in conditions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
x <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 comment"># ❌ This assigns, doesn't compare</span> <span class="token comment"># result <- x[x = 3] # Error or unexpected behavior</span> <span class="token comment"># ✅ Use == for comparison</span> result <span class="token operator"><-</span> x<span class="token punctuation">[</span>x <span class="token operator">==</span> <span class="token number">3</span><span class="token punctuation">]</span> print<span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token comment"># 3</span> |
Mistake 4: Forgetting about Recycling
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
v1 <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> v2 <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token comment"># This works but may hide logical errors</span> result <span class="token operator"><-</span> v1 <span class="token operator">+</span> v2 <span class="token comment"># 11 22 13 24 15</span> print<span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token comment"># ✅ Check lengths first</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>length<span class="token punctuation">(</span>v1<span class="token punctuation">)</span> <span class="token percent-operator operator">%%</span> length<span class="token punctuation">(</span>v2<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> warning<span class="token punctuation">(</span><span class="token string">"Vectors lengths are not multiples"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Mistake 5: Confusing & and &&
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
log_vec <span class="token operator"><-</span> c<span class="token punctuation">(</span><span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">FALSE</span><span class="token punctuation">,</span> <span class="token boolean">TRUE</span><span class="token punctuation">,</span> <span class="token boolean">FALSE</span><span class="token punctuation">)</span> <span class="token comment"># ❌ && only checks first element</span> print<span class="token punctuation">(</span>log_vec <span class="token operator">&&</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> <span class="token comment"># TRUE (only checks first element)</span> <span class="token comment"># ✅ Use & for element-wise</span> print<span class="token punctuation">(</span>log_vec <span class="token operator">&</span> <span class="token boolean">TRUE</span><span class="token punctuation">)</span> <span class="token comment"># TRUE FALSE TRUE FALSE</span> |
Part 12: Performance Tips
Pre-allocation
|
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"># ❌ Slow - growing vector in loop</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result <span class="token operator"><-</span> c<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 operator"><-</span> c<span class="token punctuation">(</span>result<span class="token punctuation">,</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 punctuation">)</span> <span class="token comment"># ✅ Fast - pre-allocate</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result <span class="token operator"><-</span> numeric<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>i<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> |
Vectorization is Faster
|
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">1000000</span> x <span class="token operator"><-</span> <span class="token number">1</span><span class="token operator">:</span>n <span class="token comment"># ❌ Loop is slow</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result1 <span class="token operator"><-</span> numeric<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> result1<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><-</span> sqrt<span class="token punctuation">(</span>x<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment"># ✅ Vectorized is fast</span> system.time<span class="token punctuation">(</span><span class="token punctuation">{</span> result2 <span class="token operator"><-</span> sqrt<span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> print<span class="token punctuation">(</span>identical<span class="token punctuation">(</span>result1<span class="token punctuation">,</span> result2<span class="token punctuation">)</span><span class="token punctuation">)</span> |
Summary: The Vector Philosophy
Vectors are the foundation of R programming. Master these concepts:
Creating vectors:
-
c()for combining -
:for sequences -
seq()for flexible sequences -
rep()for repetitions
Accessing elements:
-
Single bracket
[]with position -
Logical vectors for conditional access
-
Names for named access
Vector operations:
-
Arithmetic is element-wise
-
Recycling for different lengths
-
Vectorized functions for efficiency
Vector functions:
-
length(),typeof(),class() -
sum(),mean(),sd(), etc. -
sort(),order(),rev() -
unique(),table() -
%in%for membership testing
Key principles:
-
All elements must be the same type
-
Indexing starts at 1
-
Most functions are vectorized
-
Missing values (NA) propagate
-
Pre-allocation for speed
Vectors are like the atoms of R – small, fundamental, and when combined, they create everything else in the language. Master vectors, and you’ve mastered the foundation of R!
Would you like me to elaborate on any specific aspect of vectors or explore more advanced vector operations?
