## R Script Sample File
## Source: http://www.rexamples.com

## Basics
a <- 42.24
a <- 42i
a <- 42L
a <- 42
A <- a * 2 # R is case sensitive
print(a)
cat(A, "\n") # "84" is concatenated with "\n"
if(A>a) # true, 84 > 42
{
cat(A, ">", a, "\n")
}

## Functions
Square <- function(x) {
return(x^2)
}

print(Square(4))
print(Square(x=4)) # same thing

DoSomething(color="red",number=55)

## Countdown
countdown <- function(from)
{
print(from)
while(from!=0)
{
Sys.sleep(1)
from <- from - 1
print(from)
}
}

countdown(5)

## Reading user input
readinteger <- function()
{
n <- readline(prompt="Enter an integer: ")
n <- as.integer(n)
if (is.na(n)){
n <- readinteger()
}
return(n)
}
print(readinteger())

readinteger <- function()
{
n <- readline(prompt="Enter an integer: ")
if(!grepl("^[0-9]+$",n))
{
return(readinteger())
}

return(as.integer(n))
}
print(readinteger())

## Guess a random number game
readinteger <- function()
{
n <- readline(prompt="Enter an integer: ")
if(!grepl("^[0-9]+$",n))
{
return(readinteger())
}
return(as.integer(n))
}

# real program start here

num <- round(runif(1) * 100, digits = 0)
guess <- -1

cat("Guess a number between 0 and 100.\n")

while(guess != num)
{
guess <- readinteger()
if (guess == num)
{
cat("Congratulations,", num, "is right.\n")
}
else if (guess < num)
{
cat("It's bigger!\n")
}
else if(guess > num)
{
cat("It's smaller!\n")
}
}

## Lists
sum(0:9)
append(LETTERS[1:13],letters[14:26])
c(1,6,4,9)*2
something <- c(1,4,letters[2]) # indices start at one, you get (1,4,"b")
length(something)

## margrittr's pipe
diamonds %>%
filter(price > 1000) %>%
group_by(cut) %>%
tally() %>%
rename(tally = n) %>%
arrange(-tally) %>%
mutate(pct = tally / sum(tally)) -> df

## R native pipes (R > 4.1)
Sys.setenv("_R_USE_PIPEBIND_"= TRUE)
mtcars |> x => lm(mpg ~ cyl, data = x)

## ggplot2
plot = ggplot(diamonds, aes(x = price, y = carat)) +
geom_point(alpha = 0.3, colour = 'steelblue') +
labs(
title = "ggplot diamonds",
x = "Price, $",
y = "Carat"
) +
facet_wrap(~ cut) +
theme_minimal()

plot + coord_flip()