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
[1] "banana"
# Vector operations
nums * 2 # 2 4 6 8 10
[1] 2 4 6 8 10
[1] 15
[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
'data.frame': 3 obs. of 3 variables:
$ Name : chr "Alice" "Bob" "Carol"
$ Age : num 25 30 28
$ Score: num 88 92 95
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
[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
[1] "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
[1] 15.5
sd(data) # standard deviation
[1] 13.49074
[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
[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
[1] 1 2 3
[1] 3 2 1
unique(c(1, 1, 2, 3)) # 1 2 3
[1] 1 2 3
[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=