# Load packages
# Core
library(tidyverse)
library(tidyquant)
library(scales)
# For Reproducible Work
set.seed(1234)
# Create a Data Frame
df <- tibble::tibble(
a = rnorm(10),
b = rnorm(10),
c = rnorm(10),
d = rnorm(10)
)
# Rescale Each Column
df$a <- (df$a - min(df$a, na.rm = TRUE)) /
(max(df$a, na.rm = TRUE) - min(df$a, na.rm = TRUE))
df$b <- (df$b - min(df$b, na.rm = TRUE)) /
(max(df$b, na.rm = TRUE) - min(df$b, na.rm = TRUE))
df$c <- (df$c - min(df$c, na.rm = TRUE)) /
(max(df$c, na.rm = TRUE) - min(df$c, na.rm = TRUE))
df$d <- (df$d - min(df$d, na.rm = TRUE)) /
(max(df$d, na.rm = TRUE) - min(df$d, na.rm = TRUE))
recsale <- function(x) {
# Body
x <- (x - min(x, na.rm = TRUE)) /
(max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
# Return Values
return(x)
}
df$a <- rescale(df$a)
df$b <- rescale(df$b)
df$c <- rescale(df$c)
df$d <- rescale(df$d)
df
## # A tibble: 10 × 4
## a b c d
## <dbl> <dbl> <dbl> <dbl>
## 1 0.332 0.153 0.782 1
## 2 0.765 0 0.473 0.519
## 3 1 0.0651 0.498 0.448
## 4 0 0.311 0.943 0.511
## 5 0.809 0.573 0.373 0.168
## 6 0.831 0.260 0 0.308
## 7 0.516 0.143 1 0
## 8 0.524 0.0255 0.210 0.256
## 9 0.519 0.0472 0.708 0.575
## 10 0.424 1 0.253 0.522
Name the function as short as possible. Also, make sure that the function is clear and makes sense. This makes typing for functions easier. Do not overwrite existing functions, if you are writing a function use the preexisting one. This section is basically talking about how to make life easier when it comes to functions and coding.
detect_sign <- function(x) {
if(x > 0) {
message("value is positive")
print(x)
} else if(x == 0) {
warning("value is not positive, but it can be accepted")
print(x)
} else {
stop("value is negative, the function must stop")
print(x)
}
}
3 %>% detect_sign()
## [1] 3
0 %>% detect_sign()
## [1] 0
# -1 %>% detect_sign()
# ?mean
x <- c(1:10, 100, NA)
x
## [1] 1 2 3 4 5 6 7 8 9 10 100 NA
x %>% mean()
## [1] NA
x %>% mean(na.rm = TRUE)
## [1] 14.09091
x %>% mean(na.rm = TRUE, trim = 0.1)
## [1] 6
mean_remove_na <- function(x, na.rm = TRUE, ...) {
avg <- mean(x, na.rm = na.rm, ...)
return(avg)
}
x %>% mean_remove_na()
## [1] 14.09091
x %>% mean_remove_na(na.rm = FALSE)
## [1] NA
x %>% mean_remove_na(trim = 0.1)
## [1] 6
Two Types of Functions: