1. Variables & Data Types

# Numeric
x <- 42
y <- 3.14

# Character (string)
name <- "Alice"

# Logical
is_true <- TRUE

# Check types
class(x)       # "numeric"
[1] "numeric"
class(name)    # "character"
[1] "character"
class(is_true) # "logical"
[1] "logical"

2. Vectors

# Create a vector
nums <- c(1, 2, 3, 4, 5)
fruits <- c("apple", "banana", "cherry")

# Access elements (1-indexed)
nums[1]      # 1
[1] 1
fruits[2]    # "banana"
[1] "banana"
# Vector operations
nums * 2     # 2 4 6 8 10
[1]  2  4  6  8 10
sum(nums)    # 15
[1] 15
mean(nums)   # 3
[1] 3

3. Data Frames

# Create a data frame
df <- data.frame(
  Name  = c("Alice", "Bob", "Carol"),
  Age   = c(25, 30, 28),
  Score = c(88, 92, 95)
)

# Inspect
print(df)
   Name Age Score
1 Alice  25    88
2   Bob  30    92
3 Carol  28    95
str(df)
'data.frame':   3 obs. of  3 variables:
 $ Name : chr  "Alice" "Bob" "Carol"
 $ Age  : num  25 30 28
 $ Score: num  88 92 95
summary(df)
        Name        Age            Score      
 Length   :3   Min.   :25.00   Min.   :88.00  
 N.unique :3   1st Qu.:26.50   1st Qu.:90.00  
 N.blank  :0   Median :28.00   Median :92.00  
 Min.nchar:3   Mean   :27.67   Mean   :91.67  
 Max.nchar:5   3rd Qu.:29.00   3rd Qu.:93.50  
               Max.   :30.00   Max.   :95.00  
# Access columns
df$Name
[1] "Alice" "Bob"   "Carol"
# Filter rows
df[df$Age > 25, ]

4. Control Flow

# If / else
x <- 10
if (x > 5) {
  print("Greater than 5")
} else {
  print("5 or less")
}
[1] "Greater than 5"
# For loop
for (i in 1:5) {
  print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
# While loop
count <- 1
while (count <= 3) {
  print(count)
  count <- count + 1
}
[1] 1
[1] 2
[1] 3

5. Functions

# Define a function
add <- function(a, b) {
  return(a + b)
}

add(3, 7)   # 10
[1] 10
# With default argument
greet <- function(name = "World") {
  paste("Hello,", name)
}

greet()           # "Hello, World"
[1] "Hello, World"
greet("Alice")    # "Hello, Alice"
[1] "Hello, Alice"

6. String Operations

s <- "Hello, R!"

nchar(s)               # 9
[1] 9
toupper(s)             # "HELLO, R!"
[1] "HELLO, R!"
tolower(s)             # "hello, r!"
[1] "hello, r!"
substring(s, 1, 5)     # "Hello"
[1] "Hello"
gsub("R", "World", s)  # "Hello, World!"
[1] "Hello, World!"
paste("Good", "morning")   # "Good morning"
[1] "Good morning"
paste0("value=", 42)       # "value=42"
[1] "value=42"

7. Basic Statistics

data <- c(4, 8, 15, 16, 23, 42)

mean(data)      # mean
[1] 18
median(data)    # median
[1] 15.5
sd(data)        # standard deviation
[1] 13.49074
var(data)       # variance
[1] 182
range(data)     # min and max
[1]  4 42
quantile(data)  # quartiles
   0%   25%   50%   75%  100% 
 4.00  9.75 15.50 21.25 42.00 

8. Basic Plotting

# Line plot
plot(1:10, type = "l", main = "Line Plot", xlab = "X", ylab = "Y", col = "steelblue", lwd = 2)

# Bar chart
barplot(c(3, 5, 2, 8),
        names.arg = c("A", "B", "C", "D"),
        main = "Bar Chart",
        col = c("steelblue", "tomato", "seagreen", "goldenrod"))

# Histogram
set.seed(42)
hist(rnorm(100), main = "Histogram", col = "steelblue", border = "white", xlab = "Value")

# Scatter plot
set.seed(42)
x <- rnorm(50)
y <- rnorm(50)
plot(x, y, main = "Scatter Plot", col = "tomato", pch = 16, cex = 1.2)


9. Importing & Exporting Data

# Read CSV
df <- read.csv("data.csv")

# Write CSV
write.csv(df, "output.csv", row.names = FALSE)

# Read with readr (tidyverse)
# install.packages("readr")
library(readr)
df <- read_csv("data.csv")

10. Useful Built-in Functions

length(c(1, 2, 3))      # 3
[1] 3
seq(1, 10, by = 2)      # 1 3 5 7 9
[1] 1 3 5 7 9
rep(0, times = 5)       # 0 0 0 0 0
[1] 0 0 0 0 0
sort(c(3, 1, 2))        # 1 2 3
[1] 1 2 3
rev(c(1, 2, 3))         # 3 2 1
[1] 3 2 1
unique(c(1, 1, 2, 3))   # 1 2 3
[1] 1 2 3
is.na(NA)               # TRUE
[1] TRUE

11. Grids & Tables

11.1 Basic Matrix (Grid)

# Create a 3x3 matrix
m <- matrix(1:9, nrow = 3, ncol = 3)
print(m)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
# Fill by row
m2 <- matrix(1:9, nrow = 3, byrow = TRUE)
print(m2)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

11.2 Data Frame as Table

df <- data.frame(
  Name  = c("Alice", "Bob", "Carol"),
  Age   = c(25, 30, 28),
  Score = c(88, 92, 95)
)

print(df)
   Name Age Score
1 Alice  25    88
2   Bob  30    92
3 Carol  28    95

11.3 Pretty Table with knitr::kable()

library(knitr)

kable(df, caption = "Student Scores", align = c("l", "c", "c"))
Student Scores
Name Age Score
Alice 25 88
Bob 30 92
Carol 28 95

11.4 Interactive Table with DT

# install.packages("DT")
library(DT)

datatable(df,
          options = list(pageLength = 5),
          caption = "Interactive Student Table")

11.5 Contingency Table (Frequency Count)

gender <- c("M", "F", "M", "F", "M")
passed <- c("Yes", "No", "Yes", "Yes", "No")

table(gender, passed)
      passed
gender No Yes
     F  1   1
     M  1   2

Summary: Table Methods in R

R Table Methods Overview
Method Best For
matrix() Numeric grids, math operations
data.frame() Mixed data, analysis
kable() Markdown reports
DT::datatable() Interactive browsing
table() Frequency counts
LS0tDQp0aXRsZTogIlIgTGFuZ3VhZ2UgQmFzaWNzICYgVGFibGVzIg0KYXV0aG9yOiAiUiBOb3RlYm9vayINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0aGVtZTogZmxhdGx5DQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQotLS0NCg0KIyAxLiBWYXJpYWJsZXMgJiBEYXRhIFR5cGVzDQoNCmBgYHtyIHZhcmlhYmxlc30NCiMgTnVtZXJpYw0KeCA8LSA0Mg0KeSA8LSAzLjE0DQoNCiMgQ2hhcmFjdGVyIChzdHJpbmcpDQpuYW1lIDwtICJBbGljZSINCg0KIyBMb2dpY2FsDQppc190cnVlIDwtIFRSVUUNCg0KIyBDaGVjayB0eXBlcw0KY2xhc3MoeCkgICAgICAgIyAibnVtZXJpYyINCmNsYXNzKG5hbWUpICAgICMgImNoYXJhY3RlciINCmNsYXNzKGlzX3RydWUpICMgImxvZ2ljYWwiDQpgYGANCg0KLS0tDQoNCiMgMi4gVmVjdG9ycw0KDQpgYGB7ciB2ZWN0b3JzfQ0KIyBDcmVhdGUgYSB2ZWN0b3INCm51bXMgPC0gYygxLCAyLCAzLCA0LCA1KQ0KZnJ1aXRzIDwtIGMoImFwcGxlIiwgImJhbmFuYSIsICJjaGVycnkiKQ0KDQojIEFjY2VzcyBlbGVtZW50cyAoMS1pbmRleGVkKQ0KbnVtc1sxXSAgICAgICMgMQ0KZnJ1aXRzWzJdICAgICMgImJhbmFuYSINCg0KIyBWZWN0b3Igb3BlcmF0aW9ucw0KbnVtcyAqIDIgICAgICMgMiA0IDYgOCAxMA0Kc3VtKG51bXMpICAgICMgMTUNCm1lYW4obnVtcykgICAjIDMNCmBgYA0KDQotLS0NCg0KIyAzLiBEYXRhIEZyYW1lcw0KDQpgYGB7ciBkYXRhZnJhbWVzfQ0KIyBDcmVhdGUgYSBkYXRhIGZyYW1lDQpkZiA8LSBkYXRhLmZyYW1lKA0KICBOYW1lICA9IGMoIkFsaWNlIiwgIkJvYiIsICJDYXJvbCIpLA0KICBBZ2UgICA9IGMoMjUsIDMwLCAyOCksDQogIFNjb3JlID0gYyg4OCwgOTIsIDk1KQ0KKQ0KDQojIEluc3BlY3QNCnByaW50KGRmKQ0Kc3RyKGRmKQ0Kc3VtbWFyeShkZikNCg0KIyBBY2Nlc3MgY29sdW1ucw0KZGYkTmFtZQ0KDQojIEZpbHRlciByb3dzDQpkZltkZiRBZ2UgPiAyNSwgXQ0KYGBgDQoNCi0tLQ0KDQojIDQuIENvbnRyb2wgRmxvdw0KDQpgYGB7ciBjb250cm9sX2Zsb3d9DQojIElmIC8gZWxzZQ0KeCA8LSAxMA0KaWYgKHggPiA1KSB7DQogIHByaW50KCJHcmVhdGVyIHRoYW4gNSIpDQp9IGVsc2Ugew0KICBwcmludCgiNSBvciBsZXNzIikNCn0NCg0KIyBGb3IgbG9vcA0KZm9yIChpIGluIDE6NSkgew0KICBwcmludChpKQ0KfQ0KDQojIFdoaWxlIGxvb3ANCmNvdW50IDwtIDENCndoaWxlIChjb3VudCA8PSAzKSB7DQogIHByaW50KGNvdW50KQ0KICBjb3VudCA8LSBjb3VudCArIDENCn0NCmBgYA0KDQotLS0NCg0KIyA1LiBGdW5jdGlvbnMNCg0KYGBge3IgZnVuY3Rpb25zfQ0KIyBEZWZpbmUgYSBmdW5jdGlvbg0KYWRkIDwtIGZ1bmN0aW9uKGEsIGIpIHsNCiAgcmV0dXJuKGEgKyBiKQ0KfQ0KDQphZGQoMywgNykgICAjIDEwDQoNCiMgV2l0aCBkZWZhdWx0IGFyZ3VtZW50DQpncmVldCA8LSBmdW5jdGlvbihuYW1lID0gIldvcmxkIikgew0KICBwYXN0ZSgiSGVsbG8sIiwgbmFtZSkNCn0NCg0KZ3JlZXQoKSAgICAgICAgICAgIyAiSGVsbG8sIFdvcmxkIg0KZ3JlZXQoIkFsaWNlIikgICAgIyAiSGVsbG8sIEFsaWNlIg0KYGBgDQoNCi0tLQ0KDQojIDYuIFN0cmluZyBPcGVyYXRpb25zDQoNCmBgYHtyIHN0cmluZ3N9DQpzIDwtICJIZWxsbywgUiEiDQoNCm5jaGFyKHMpICAgICAgICAgICAgICAgIyA5DQp0b3VwcGVyKHMpICAgICAgICAgICAgICMgIkhFTExPLCBSISINCnRvbG93ZXIocykgICAgICAgICAgICAgIyAiaGVsbG8sIHIhIg0Kc3Vic3RyaW5nKHMsIDEsIDUpICAgICAjICJIZWxsbyINCmdzdWIoIlIiLCAiV29ybGQiLCBzKSAgIyAiSGVsbG8sIFdvcmxkISINCnBhc3RlKCJHb29kIiwgIm1vcm5pbmciKSAgICMgIkdvb2QgbW9ybmluZyINCnBhc3RlMCgidmFsdWU9IiwgNDIpICAgICAgICMgInZhbHVlPTQyIg0KYGBgDQoNCi0tLQ0KDQojIDcuIEJhc2ljIFN0YXRpc3RpY3MNCg0KYGBge3Igc3RhdGlzdGljc30NCmRhdGEgPC0gYyg0LCA4LCAxNSwgMTYsIDIzLCA0MikNCg0KbWVhbihkYXRhKSAgICAgICMgbWVhbg0KbWVkaWFuKGRhdGEpICAgICMgbWVkaWFuDQpzZChkYXRhKSAgICAgICAgIyBzdGFuZGFyZCBkZXZpYXRpb24NCnZhcihkYXRhKSAgICAgICAjIHZhcmlhbmNlDQpyYW5nZShkYXRhKSAgICAgIyBtaW4gYW5kIG1heA0KcXVhbnRpbGUoZGF0YSkgICMgcXVhcnRpbGVzDQpgYGANCg0KLS0tDQoNCiMgOC4gQmFzaWMgUGxvdHRpbmcNCg0KYGBge3IgcGxvdHMsIGZpZy53aWR0aD03LCBmaWcuaGVpZ2h0PTR9DQojIExpbmUgcGxvdA0KcGxvdCgxOjEwLCB0eXBlID0gImwiLCBtYWluID0gIkxpbmUgUGxvdCIsIHhsYWIgPSAiWCIsIHlsYWIgPSAiWSIsIGNvbCA9ICJzdGVlbGJsdWUiLCBsd2QgPSAyKQ0KYGBgDQoNCmBgYHtyIGJhcnBsb3QsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTR9DQojIEJhciBjaGFydA0KYmFycGxvdChjKDMsIDUsIDIsIDgpLA0KICAgICAgICBuYW1lcy5hcmcgPSBjKCJBIiwgIkIiLCAiQyIsICJEIiksDQogICAgICAgIG1haW4gPSAiQmFyIENoYXJ0IiwNCiAgICAgICAgY29sID0gYygic3RlZWxibHVlIiwgInRvbWF0byIsICJzZWFncmVlbiIsICJnb2xkZW5yb2QiKSkNCmBgYA0KDQpgYGB7ciBoaXN0b2dyYW0sIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTR9DQojIEhpc3RvZ3JhbQ0Kc2V0LnNlZWQoNDIpDQpoaXN0KHJub3JtKDEwMCksIG1haW4gPSAiSGlzdG9ncmFtIiwgY29sID0gInN0ZWVsYmx1ZSIsIGJvcmRlciA9ICJ3aGl0ZSIsIHhsYWIgPSAiVmFsdWUiKQ0KYGBgDQoNCmBgYHtyIHNjYXR0ZXIsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTR9DQojIFNjYXR0ZXIgcGxvdA0Kc2V0LnNlZWQoNDIpDQp4IDwtIHJub3JtKDUwKQ0KeSA8LSBybm9ybSg1MCkNCnBsb3QoeCwgeSwgbWFpbiA9ICJTY2F0dGVyIFBsb3QiLCBjb2wgPSAidG9tYXRvIiwgcGNoID0gMTYsIGNleCA9IDEuMikNCmBgYA0KDQotLS0NCg0KIyA5LiBJbXBvcnRpbmcgJiBFeHBvcnRpbmcgRGF0YQ0KDQpgYGB7ciBpbXBvcnRfZXhwb3J0LCBldmFsPUZBTFNFfQ0KIyBSZWFkIENTVg0KZGYgPC0gcmVhZC5jc3YoImRhdGEuY3N2IikNCg0KIyBXcml0ZSBDU1YNCndyaXRlLmNzdihkZiwgIm91dHB1dC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KIyBSZWFkIHdpdGggcmVhZHIgKHRpZHl2ZXJzZSkNCiMgaW5zdGFsbC5wYWNrYWdlcygicmVhZHIiKQ0KbGlicmFyeShyZWFkcikNCmRmIDwtIHJlYWRfY3N2KCJkYXRhLmNzdiIpDQpgYGANCg0KLS0tDQoNCiMgMTAuIFVzZWZ1bCBCdWlsdC1pbiBGdW5jdGlvbnMNCg0KYGBge3IgYnVpbHRpbnN9DQpsZW5ndGgoYygxLCAyLCAzKSkgICAgICAjIDMNCnNlcSgxLCAxMCwgYnkgPSAyKSAgICAgICMgMSAzIDUgNyA5DQpyZXAoMCwgdGltZXMgPSA1KSAgICAgICAjIDAgMCAwIDAgMA0Kc29ydChjKDMsIDEsIDIpKSAgICAgICAgIyAxIDIgMw0KcmV2KGMoMSwgMiwgMykpICAgICAgICAgIyAzIDIgMQ0KdW5pcXVlKGMoMSwgMSwgMiwgMykpICAgIyAxIDIgMw0KaXMubmEoTkEpICAgICAgICAgICAgICAgIyBUUlVFDQpgYGANCg0KLS0tDQoNCiMgMTEuIEdyaWRzICYgVGFibGVzDQoNCiMjIDExLjEgQmFzaWMgTWF0cml4IChHcmlkKQ0KDQpgYGB7ciBtYXRyaXh9DQojIENyZWF0ZSBhIDN4MyBtYXRyaXgNCm0gPC0gbWF0cml4KDE6OSwgbnJvdyA9IDMsIG5jb2wgPSAzKQ0KcHJpbnQobSkNCg0KIyBGaWxsIGJ5IHJvdw0KbTIgPC0gbWF0cml4KDE6OSwgbnJvdyA9IDMsIGJ5cm93ID0gVFJVRSkNCnByaW50KG0yKQ0KYGBgDQoNCiMjIDExLjIgRGF0YSBGcmFtZSBhcyBUYWJsZQ0KDQpgYGB7ciBkZl90YWJsZX0NCmRmIDwtIGRhdGEuZnJhbWUoDQogIE5hbWUgID0gYygiQWxpY2UiLCAiQm9iIiwgIkNhcm9sIiksDQogIEFnZSAgID0gYygyNSwgMzAsIDI4KSwNCiAgU2NvcmUgPSBjKDg4LCA5MiwgOTUpDQopDQoNCnByaW50KGRmKQ0KYGBgDQoNCiMjIDExLjMgUHJldHR5IFRhYmxlIHdpdGggYGtuaXRyOjprYWJsZSgpYA0KDQpgYGB7ciBrYWJsZX0NCmxpYnJhcnkoa25pdHIpDQoNCmthYmxlKGRmLCBjYXB0aW9uID0gIlN0dWRlbnQgU2NvcmVzIiwgYWxpZ24gPSBjKCJsIiwgImMiLCAiYyIpKQ0KYGBgDQoNCiMjIDExLjQgSW50ZXJhY3RpdmUgVGFibGUgd2l0aCBgRFRgDQoNCmBgYHtyIGR0X3RhYmxlfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJEVCIpDQpsaWJyYXJ5KERUKQ0KDQpkYXRhdGFibGUoZGYsDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDUpLA0KICAgICAgICAgIGNhcHRpb24gPSAiSW50ZXJhY3RpdmUgU3R1ZGVudCBUYWJsZSIpDQpgYGANCg0KIyMgMTEuNSBDb250aW5nZW5jeSBUYWJsZSAoRnJlcXVlbmN5IENvdW50KQ0KDQpgYGB7ciBjb250aW5nZW5jeX0NCmdlbmRlciA8LSBjKCJNIiwgIkYiLCAiTSIsICJGIiwgIk0iKQ0KcGFzc2VkIDwtIGMoIlllcyIsICJObyIsICJZZXMiLCAiWWVzIiwgIk5vIikNCg0KdGFibGUoZ2VuZGVyLCBwYXNzZWQpDQpgYGANCg0KLS0tDQoNCiMgU3VtbWFyeTogVGFibGUgTWV0aG9kcyBpbiBSDQoNCmBgYHtyIHN1bW1hcnlfdGFibGUsIGVjaG89RkFMU0V9DQpzdW1tYXJ5X2RmIDwtIGRhdGEuZnJhbWUoDQogIE1ldGhvZCAgICAgICA9IGMoIm1hdHJpeCgpIiwgImRhdGEuZnJhbWUoKSIsICJrYWJsZSgpIiwgIkRUOjpkYXRhdGFibGUoKSIsICJ0YWJsZSgpIiksDQogIEJlc3RfRm9yICAgICA9IGMoDQogICAgIk51bWVyaWMgZ3JpZHMsIG1hdGggb3BlcmF0aW9ucyIsDQogICAgIk1peGVkIGRhdGEsIGFuYWx5c2lzIiwNCiAgICAiTWFya2Rvd24gcmVwb3J0cyIsDQogICAgIkludGVyYWN0aXZlIGJyb3dzaW5nIiwNCiAgICAiRnJlcXVlbmN5IGNvdW50cyINCiAgKQ0KKQ0KDQprYWJsZShzdW1tYXJ5X2RmLCBjb2wubmFtZXMgPSBjKCJNZXRob2QiLCAiQmVzdCBGb3IiKSwgY2FwdGlvbiA9ICJSIFRhYmxlIE1ldGhvZHMgT3ZlcnZpZXciKQ0KYGBgDQo=