ในการเรียนครั้งแรกบทแรก เราจะแนะนำให้ทุกคนรู้จัก Syntax หรือไวยากรณ์พื้นฐานของ R เพื่อที่ทุกคนจะได้เห็นว่า R มีคุณค่าและยิ่งใหญ่แค่ไหน

1. R ในฐานะเครื่องคิดเลข

ง่ายสุดเลย เราสามารถใช้ R เป็นเครื่องคิดเลขแบบเก๋ ๆ ให้เราได้ โดยพิมพ์ code เหมือนเราคิดเลขปกติ แล่้วเอา cursur ไปวางบนบรรทัดนั้นแล้วก็กด Ctrl ค้างไว้แล้ว Enter

3+5
## [1] 8

Ctrl ค้างไว้แล้ว Enter นั้นเป็นการสั่งให้ code ที่เราเขียนขึ้นทำการประมวลผลให้ได้คำตอบออกมา (ภาษาทางการเรียกว่า compile) เราสามารถทำการคำนวณที่ซับซ้อนขึ้นได้ โดยใช้สัญลักษณ์ต่อไปนี้

ลองดูตัวอย่างตามด้านล่าง

3*4^(2/7)
## [1] 4.457983
log10(24)
## [1] 1.380211
sqrt(29)
## [1] 5.385165

ข้างบนเป็นการคำนวณ

จะเห็นว่าเราสามารถคำนวณสมการพิสดารต่าง ๆ ได้มากมาย โดยการเขียนโค้ด ไม่เห็นต้องไปซื้อเครื่องคิดเลขเฉพาะทางเลย ในเมื่อเรามีคอมพิวเตอร์และ R อยู่แล้ว

ทดสอบความเข้าใจ

ลองเขียน code เพื่อคำนวณ - \(\sqrt{5\times5}\)

2. R เก็บข้อมูลเป็น object

R ใช้สิ่งที่เรียกว่า object ในการทำงาน ทุกอย่างใน R จะถูกเก็บไว้ใน object ซึ่งเราสามารถสร้าง หรือ มอบหมาย (ภาษาอังกฤษใช้คำว่า assign) ค่าให้กับชื่อใหม่ โดยใช้ code <-

x <- 10
x
## [1] 10

code ด้านบน จะอ่านได้ว่า เราได้สร้าง object ใหม่ที่ชื่อ x และได้มอบหมายตัวเลข 10 ให้เป็นค่าของ object ใหม่นี้ ดังนั้น object x ของเรานี้ตอนนี้มีค่าเป็น 10 และเราก็สามารถทำอย่างอื่นกับ object นี้ได้ เช่น

x^2
## [1] 100
x*x
## [1] 100

เราสามารถตั้งชื่อ object เป็นอะไรก็ได้ตราบใดที่ไม่ได้ขึ้นด้วยตัวเลขและไม่มีช่องว่างในนั้น เช่น ผมจะสร้าง object ใหม่ที่ชื่อว่า my.height เพื่อเก็บข้อมูลความสูงของผม แล้วมอบหมายเลข 165 เป็นค่าที่จะให้มันเก็บ

my.height <- 165
my.height
## [1] 165

เราสามารถเก็บข้อมูลที่เป็นตัวหนังสือได้ด้วย โดยใส่ฟันหนู `" " ไปรอบๆ คำของเราเช่น

my.name <- "bier"
my.name
## [1] "bier"

ทดสอบความเข้าใจ

ลองเขียน code เพื่อสร้าง object ที่ชื่อ my.height ขึ้นมาใหม่ แต่คราวนี้ใส่ความสูงของคุณเองลงไป แล้วหาร object ที่สร้างมาใหม่นี้ด้วย 100 เพื่อเปลี่ยนเป็นหน่วยเมตร

3. ข้อมูลในรูป Vector

เราสามารถมอบหมายค่าหลาย ๆ ค่า ให้กับ object 1 อันได้ ตัวอย่างเช่น เราสามารถเก็บข้อมูลความสูงของเพื่อน 6 คน ใน object เดียวกันได้ โดยใช้คำสั่ง c() แล้วใส่ความสูงของเพื่อนแต่ละคนเข้าไป และคั่นด้วย , ดังนี้

height <- c(1.75, 1.80, 1.65, 1.90, 1.75, 1.91)
height
## [1] 1.75 1.80 1.65 1.90 1.75 1.91

ตอนนี้ object ที่ชื่อว่า height ชื่อเรียกใหม่ว่า vector ซึ่งเราสามารถทำการคำนวณกับทั้ง vector นี้ได้เช่นกัน ตัวอย่างเช่น เราสามารถเปลี่ยนความสูงทั้งหมดนี้เป็นหน่วยเซนติเมตรได้โดยการคูณ 100 กับทุกค่า ทั้งหมดแบบนี้

height*100
## [1] 175 180 165 190 175 191

หรือสำหรับคนรักสุขภาพ เราสามารถคำนวณดัชนีมวลกาย หรือ Body Mass Index (BMI) จากสูตรว่า

\[ BMI = \frac{weight}{height^2}\]

โดยการสร้าง vector สำหรับน้ำหนักขึ้นมาก่อนแล้วค่อยนำไปเข้าสูตร

weight <- c(60, 72, 57, 90, 95, 72)
bmi <- weight/height^2
bmi
## [1] 19.59184 22.22222 20.93664 24.93075 31.02041 19.73630

สิ่งที่ code นี้ทำคือ นำค่าแรกของ height (1.75) มายกกำลังสอง ก่อนจะไปเป็นตัวหารของค่าแรกของ weight (60) และทำอย่างนี้ซ้ำไปทุกค่า จนกว่าจะได้ค่าของทุกคน

4. ทำงานด้วย Functions

R มีสิ่งที่เรียกว่า function ที่มากับโปรแกรมที่เราสามารถใช้การคำนวณทางสถิติและอื่น ๆ อีกมากมาย เราได้ใช้ function ตัวแรกไปแล้วก็คือ c() ที่ทำหน้าที่เชื่อมข้อมูลเข้าด้วยกัน โดยทั่วไปแล้ว function ใน R จะเป็นคำกริยาที่ตามด้วย () ทันที (ไม่มีเว้นวรรค) เมื่อเราใส่ object เข้าไปในวงเล็บ function ก็จะทำหน้าที่นั้นกับ object นั้นทันที ตัวอย่างเช่น function ที่ชื่อว่า mean() ใช้ในการหาค่าเฉลี่ยของ vector ของตัวเลข เราจะลองมาค่าเฉลี่ยของ vector weight ที่เราสร้างไว้แล้วข้างต้น

mean(weight)
## [1] 74.33333

ทดสอบความเข้าใจ

เขียนโค้ดเพื่อคำนวณ

ของ weight และ height

5.ฝึกวาดกราฟใน R

เราจะเริ่มจากกราฟง่าย ๆ ระหว่าง vector สองอันที่เราสร้างไว้แล้วคือ weight และ height โดยใช้ function ที่ชื่อว่า plot

plot(weight, height)

กราฟที่ได้ก็ดูสะอาดสบายตาดี แต่ว่าใน workshop นี้เราจะใช้ function จากชุดคำสั่ง (package) ที่เรียกว่า ggplot2 ในการวาดกราฟแทน เพราะจะได้กราฟสวยกว่ามากมาย เราสามารถติตตั้ง package เพิ่มเติมได้โดยการไปที่ Tools > Install Packages แล้วใส่คำว่า ggplot2 ลงในกล่องข้อความ แล้วกด Install ในกรณีเรา ตรงนี้น่าจะได้ทำไปแล้วตอนที่เราเตรียมการณ์

คำสั่งใน package จะไม่สามารถใช้ได้อัตโนมัติ เมื่อเราเริ่มใช้งาน R ปกติ จะต้องเรียกมันขึ้นมา (เหมือนปลุกผี!) โดยใช้ function library หลังจากนั้นเราจะเอา vector สองอันมาประกบกันเป็นตารางข้อมูลด้วยคำสั่ง data.frame()

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.5.2
new.data <- data.frame(weight, height)
new.data

ตอนนี้เราได้ข้อมูล weight กับ height อยู่ในตารางเดียวกันแล้ว ตารางนี้มีชื่อใหม่ว่า new.data เราสามารถใช้ object ใหม่นี้ วาดกราฟแบบสวย ๆ ได้ด้วย ggplot

ggplot(new.data, (aes(x = weight, y = height))) +
  geom_point()

ยังไม่ต้องกังวลกับรายละเอียดตรงนี้มาก เดี๋ยวเราจะกลับมาดูในบทที่เราพุดถึงการวาดกราฟอย่างละเอียดอีกครั้ง

เราสามารถปรับเปลี่ยนกราฟได้โดยการใส่ข้อกำหนดเพิ่มเติมลงไปใน geom_point() ตัวอย่างช่น

1) จะเปลี่ยนสี

ก็ใส่คำว่า color = ลงไปใน geom_point() แล้วตามด้วยชื่อสีใน " "

ggplot(new.data, aes(x = weight, y = height)) +
  geom_point(color = "blue")

หรือจะใช้รหัสสี HTML ก็ได้ (ลองดู http://html-color-codes.info)

ggplot(new.data, aes(x = weight, y = height)) +
  geom_point(color = "#01DFD7")

2) เปลี่ยนขนาดและรูปร่าง

ถ้าต้องการกำหนดรูปร่างและขนาดเพิ่ม ก็เติมข้อกำหนดเพิ่มลงไปหลัง “,” ตัวอย่างเช่น

ggplot(new.data, aes(x = weight, y = height)) +
  geom_point(color = "red", size = 3, shape = 17)

รหัสของรูปร่างดูได้ตามนี้ :

ทดสอบความเข้าใจ

ลองวาดกราฟระหว่าง weight กับ height ใหม่ โดยเปลี่ยนสี รูปร่าง และ ขนาดของจุดดู ลองหลาย ๆ แบบ ก็ได้นะ

6. กราฟเท่ห์ ๆ (ลองทำขำ ๆ)

หัวข้อเป็นการแสดงศักยภาพของ R ในการทำกราฟหลาย ๆ แบบ เราจะเรียนรู้เกี่ยวกับกราฟพวกนี้มากขึ้นเมื่อเราเรียนรู้ขั้นสูงขึ้นไปเรื่อย ๆ สำหรับตอนนี้ลองกด compile code แต่ละอันดูและดูกว่าเกิดอะไรขึ้น โดยที่ยังไม่ต้องเข้าใจทุกรายละเอียดก็ได้

6.1 วาดกราฟเปรียบเทียบระหว่างกลุ่ม

ด้านล่างเป็นข้อมูลความกว้างและความยาวกลีบดอกของดอกไม้ 3 ชนิด โดยเราเปรียบเทียบความยาวกลีบดอกระหว่างชนิด

data(iris)
ggplot(iris, aes(x = Species, y = Petal.Length, fill= Species)) + 
  geom_boxplot()

และดูความสัมพันธ์ระหว่างความกว้่างกับความยาว โดยใช้สีเป็นตัวแทนของแต่ละชนิด

ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color= Species)) + 
  geom_point()

6.2 วาดแผนที่

library(maps)

world <- map_data("world")

ggplot(data = world, aes(x=long, y = lat, group = group)) + 
  geom_polygon(fill = "brown") + 
  coord_fixed(1.3)

6.3 ออกแบบการทดลองภาคสนาม

package ชื่อ desplot สามารถช่วยเราออกแบบการทดลองภาคสนามได้ โดยเราจะใช้ข้อมูลตัวอย่างที่ืชื่อ yates.oats จากอีกชุดคำสั่งหนึ่งคือ agridat ซึ่งเป็นข้อมูลการผลิตข้าวโอ๊ตในสภาวะต่าง ๆ

library(desplot)
library(agridat)
data(yates.oats)
yates.oats

จากข้อมูลจะเห็นว่าเรามีทั้ง block และ gen เป็น treatment เราใช้คำสั่งด้านล่างนี้สร้าง field map ได้

desplot(block ~ col+row, yates.oats, col=nitro, text=gen, cex=1, out1=block, out2=gen, out2.gpar=list(col = "gray50", lwd = 1, lty = 1), main = "Blocked Design")