Chapter 2 – Cached random numbers

# Đoạn mã này sẽ được lưu đệm
set.seed(123)
val <- rnorm(5)
val
## [1] -0.56047565 -0.23017749  1.55870831  0.07050839  0.12928774

Mean of random numbers (dependent chunk)

# Đoạn mã này phụ thuộc vào đoạn mã 'random_numbers'
mean(val)
## [1] 0.1935703

Chapter 1 – Basic Operations

Arithmetic operations

a <- 4
b <- 3

a / b      # Chia thông thường
## [1] 1.333333
a %/% b    # Chia lấy phần nguyên
## [1] 1
a %% b     # Chia lấy phần dư
## [1] 1

Vectorization

x <- 1:5
x^2
## [1]  1  4  9 16 25

Indexing

v <- c(10, 20, 30, 40, 50)
v[2]
## [1] 20
v[c(1, 3, 5)]
## [1] 10 30 50

Logical filtering

nums <- 1:10
nums[nums %% 2 == 0]
## [1]  2  4  6  8 10

Functions

square <- function(x) {
  x^2
}
square(1:4)
## [1]  1  4  9 16

Mean of positive values

mean_positive <- function(x) {
  x <- x[x > 0]
  mean(x)
}
mean_positive(c(-2, 3, 5, -1, 4))
## [1] 4

Handling NA values

x_na <- c(1, 2, NA, 4)
mean(x_na, na.rm = TRUE)
## [1] 2.333333

Data frame

df <- data.frame(
  name = c("A", "B", "C"),
  score = c(8, 9, 7)
)
df$score
## [1] 8 9 7

Chapter 2 – Exercises

Mean of Positive Values (Pipeline)

library(magrittr)

set.seed(123)

rnorm(100) %>%
  replace(. < 0, NA) %>%
  mean(na.rm = TRUE)
## [1] 0.7889055

Root Mean Square Error (RMSE)

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
df_rmse <- data.frame(
  t = c(3, 5, 2, 7),
  y = c(2.5, 5.1, 2.2, 6.8)
)

df_rmse %>%
  mutate(sq_error = (t - y)^2) %>%
  summarise(rmse = sqrt(mean(sq_error)))
##        rmse
## 1 0.2915476