age = 20 # assign number 20 to variable named "age"In R, everything is an object: variables, vectors, dataframes, functions, even entire environments.
Let’s create a variable named “age” that contains a single numerical value:
Now let’s simply inspect its content
In R, both the assignment operator “=” and “<-” can be used to assign values to objects. In fact, “<-” is considered more traditional in R. and preferred for clarity, also because it allows differentiating assignment from other uses of “=”.
However, unlike many other teachers, I will generally favor “=” as the assignment operator in order to maintain consistency with the convention in most other programming languages
Strict rules:
Start with a letter or dot (if dot, must not be followed by a number);
Include only letters, numbers, dots, underscores;
No reserved words (e.g., “if”, “for”, “NA”, “function”).
Recommendations:
Avoid names that conflict with common functions (e.g., “mean”, “sum”, “c”);
Be concise: no length limit, but long names are difficult to read and type.
WARNING! R is Case sensitive: age and Age will be treated as two different objects!
Examples:
Allowed: “age”, “age0”, “age1”, “total_score”, “.myData”, “my.data”,
NOT allowed: “0age”, “_age”, “.0myData”, “my data”, “my-data”, “my,data”, “for”, “NA”
WARNING! Use of “.” in object names (e.g., “my.data”) is fine in R but not allowed in Python, where “.” is part of the language syntax.
Across different languages, naming conventions for longer, multi-word variable names favor snake_case (e.g., “my_data”) or camelCase (e.g., “myData”), and abbreviations where appropriate (e.g., “unipdData” better than “university_of_padova_dataset”)… preferably used in a consistent way!
| Operator | What it does | Example | Result |
|---|---|---|---|
+ |
Addition | 5.4 + 6.1 |
11.5 |
- |
Subtraction | 9 - 4.3 |
4.7 |
* |
Multiplication | 7 * 1.4 |
9.8 |
/ |
Division | 9 / 12 |
0.75 |
%/% |
Floor division | 13 %/% 4 |
3 |
%% |
Modulus | 13 %% 4 |
1 |
^ |
Exponentiation | 15 ^ 2 |
225 |
(also useful: object “pi” contains 3.1415927)
| Function | What it does | Example | Result |
|---|---|---|---|
abs |
absolute value | abs(4.3-9.8) |
5.5 |
sqrt |
square root | sqrt(176.4) |
13.28157 |
exp |
exponential function | exp(2.2) |
9.025013 (\(e^{2.2}\)) |
log |
natural logarithm, base \(e\) | log(9.025013) |
2.2 |
log |
logarithm, given base | log(10, base=2) |
3.321928 |
round |
round to integer | round(1.7384) |
2 |
round |
round to digits | round(1.7384, 2) |
1.74 |
The order of operations in R follows standard algebraic rules, unless you specify a different order using parentheses. In R, only round parentheses ( ) are used for grouping in algebraic expressions, NOT square [ ] and curly { } brackets, because they have other specific syntactic purposes.
Examples:
They are used to compare values and return logical values (TRUE, FALSE).
Let’s say that we defined age = 20, now let’s make a few examples:
| Operator | What it does | Example | Result |
|---|---|---|---|
== |
Equal to | age == 18 |
FALSE |
!= |
Not equal to | age != 18 |
TRUE |
> |
Greater than | age > 18 |
TRUE |
< |
Less than | age < 18 |
FALSE |
>= |
Greater than or equal to | age >= 18 |
TRUE |
<= |
Less than or equal to | age <= 18 |
FALSE |
They are used to combine logical values (TRUE, FALSE).
Once again, let’s say that we defined age = 20, now let’s make a few examples:
| Operator | What it does | Example | Result |
|---|---|---|---|
& |
AND | age>25 & age<60 |
FALSE |
| |
OR | age<25 | age>60 |
TRUE |
! |
NOT | !(age<18) |
TRUE |
So far, we have already encountered at least two types of data:
numeric (e.g., 20, 11.5, 13.28157);
logical/Boolean (i.e., TRUE, FALSE).
Actually, numeric data could actually be of two types: double (i.e., “double-precision floating-point”) that is with decimals like 11.5, and integer like 20.
In fact, by default, numeric values are always treated as double ( even if without decimals). To specify a number explicitly as integer, add an L after the number, like age = 20L (you likely will not need this, unless you explicitly need integers for some purposes, such as saving memory).
Another very important type of data is:
' ', or " "), like this:You may perform many operations with strings like:
The typeof() function tells you what type of data you are handling:
You may also inquire data type directly with functions is.*: