09Feb, 2022
Language blog :
Thai
Share blog : 
09 February, 2022
Thai

R Language 101: Very Basic

By

7 mins read
R Language 101: Very Basic

สวัสดีครับ วันนี้ผมจะมาแชร์สิ่งที่ผมได้เรียนรู้ผ่านมาสักระยะหนึ่งนั่นก็คือ R langauge ครับ ภาษา R เป็นภาษาคอมพิวเตอร์ ที่มีการทำงานคล้าย ๆ กับภาษา Python, C และ C++ ซึ่งมักจะเป็นที่นิยมในการหาหรือวิเคราะห์ข้อมูลทางสถิติ โดยผมจะมาแนะนำและวิธีการใช้งานเบื้องต้นเพื่อให้เพื่อน ๆ สามารถที่จะนำไปประยุกต์ใช้ได้ ซึ่งข้อดีหลักของ ภาษา R คือ

  • ผู้เรียนสามารถเรียนรู้ได้เร็ว
  • เป็นเส้นทางสำหรับผู้เริ่มต้นสถิติหรือ Machine Learning
  • มี IDE (integrated development environment) ที่ง่ายต่อ Data Science ใช้ในการทำงาน


โดยมาเริ่มตั้งแต่การติดตั้งภาษา R กันเลยครับ โดยเพื่อน ๆ สามารถที่จะติดตั้ง IDE ลงในเครื่องหรือจะสามารถที่จะเขียนโค้ดบนบราวเซอร์ ก็ได้ครับ
สามารถเข้าไปดาวน์โหลดเวอร์ชันที่ฟรีได้ที่ Rstudio แล้วติดตั้งแบบปกติเลยครับ และ ติดตั้ง Base R ให้เลือกตาม OS (Operation System) ที่เพื่อน ๆ ใช้กัน

หรืออีกช่องทางหนึ่งคือ Rstudio clound โดยให้เข้าไปทำการสมัครสมาชิกด้วย Free plan ได้เลยครับ แต่จะมีข้อจำกัดจำนวนชั่วโมงในการใช้ น่าจะ 25 ชั่วโมง ต่อ 1 เดือน

มาเริ่มกันเลยครับ โดยผมจะใช้ตัว R Studio นะครับ เริ่มมาให้ทำการ Create new file ขึ้นมาครับ

การประกาศตัวแปร

เริ่มด้วยการประกาศตัวแปร โดยเพื่อน ๆ สามารถที่จะประกาศตัวแปรอะไรขึ้นมาก็ได้ โดยไม่ต้องทำการประกาศ Data type 

  • การตรวจสอบ Type ของตัวแปรได้โดยใช้ฟังก์ชัน Class ()
  • <- เครื่องหมายมีค่าเท่ากับเครื่องหมาย = แต่ในผู้เขียน R จะใช้ <- มากกว่าครับ

## Create Variable
id <- 1
class(id)
name <- "phone A"
class(name)
price <- 23000.99
class(price)

 

  • สามารถที่จะทำการรันโค้ด โดยใช้คีย์ลัดคือ Command + Enter (mac), Control + Enter (window) จากนั้นโปรแกรมจะแสดงผลลัพธ์อีกหน้าต่างนึงครับ

ชนิดของข้อมูล Datatype

Numeric 

คือชนิดของข้อมูลที่ประกอบไปด้วยตัวเลขที่สามารถที่จะเป็นทศนิยม หรือจำนวนเต็ม

number_one <- 20.4 #numeric
class(number_one)
print(number_one)

 

"numeric"
20.4

Integer 

คือชนิดของข้อมูลที่ประกอบไปด้วยตัวเลขจำนวนเต็ม แต่โดยปกติ Data type ของตัวเลขเมื่อนั้นจะเป็น Numeric แต่สามารถที่จะแปลงให้เป็น Integer ได้โดยใช้ as.integer ()

number <- as.integer(77)
class(number)
print(number

 

"Integer"
77

Character 

คือชนิดข้อมูลที่ประกอบไปด้วยอักขระตัวอักษร โดยจะมีเงื่อนไขต้องอยู่ภายใน double quoat (“ ”) หรือ single quoat (‘ ’)

coin_a <- "Shiba Inu Coin"
coin_b <- "Doge Coin"
cat(coin_a, class(coin_a))
cat(coin_b, class(coin_b))

 

Shiba Inu Coin character
Doge Coin character


*cat () ย่อมาจาก  cat: Concatenate and Print เป็นฟังก์ชันที่ใช้ในการต่ออักขระตัวอักษรครับ

Logical

คือชนิดของข้อมูลที่มีค่าเป็น TRUE  หรือ FALSE

is_bear_season <- TRUE
is_bull_season <- FALSE
cat(is_bear_season, class(is_bear_season))
cat(is_bull_season, class(is_bull_season))

 

TRUE logical
FALSE logical

Factor 

คือชนิดของข้อมูลที่จัดเก็บเป็นชนิดหรือ categories (เพศ [หญิง, ชาย], รถ [gear auto, not auto]  โดยจะใช้คู่กับฟังก์ชัน C ()  เพื่อสร้างข้อมูลที่เป็น Factor โดยภายในจะสามารถเป็นได้ทั้งตัวเลขจำนวนเต็ม ตัวอีกษร หรือ Logical แต่ชนิดของข้อมูลจะเป็นได้แค่ชนิดเดียว เช่น 

c(1, TRUE)
c("a", "b", 1)
c(1,2,3)

ผลลัพธ์ที่ได้ออกมาจะเป็น 

"a" "b" "1"
1 2 3
1 1 

 

Data Structure

List

คือชนิดข้อมูลที่สามารถเก็บข้อมูลได้หลายประเภท เช่น character, numeric, vector, boolean, integer และยังสามารถเก็บข้อมูลประเภท Matrix หรือ List ตัวมันเองก็ได้ เช่น

list_a <- list("a", 6, 6.5, TRUE, c("Coin", "Token"))

 

> list_a[[1]][1] "a"[[2]][1] 6[[3]][1] 6.5[[4]][1] TRUE[[5]][1] "Coin"  "Token"

Vector 

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

seq(1,10,2)

Seq เป็นฟังก์ชันที่ใช้ในการสร้างตัวเลข ตั้งแต่ตัวที่ N:N เมื่อ N เป็นจำนวนเต็ม โดยต้องระบุ From เลขเริ่มต้นและ To จะเป็นเลขสิ้นสุด ส่วน by จะเป็นการให้เพิ่มขึ้นทีละเท่าไหร่

seq(from, to, by)

เมื่อทำการรันคำสั่งก็จะทำการสร้างตัวเลขตั้งแต่ 1-10 โดยจะเพิ่มขึ้นทีละ 2 ขึ้นมา

 1 3 5 7 9

Matrix

เป็นชนิดของข้อมูลที่จะถูกจัดเก็บให้เป็นในรูปแบบ matrix คือจะมิมิติขึ้นมา ซึ่งในแต่ละมิติก็จะจัดเก็บ charector ส่วน integer มักจะถูกใช้ในการคำนวนทางคณิตศาสต์เป็นหลัก

matrix(c(1:9), nrow = 3, byrow = TRUE)

ผลลัพธ์ที่ได้จากการรันคำสั่งจะได้เป็น matrix ขนาด 3 * 3 ซึ่งเรื่มตั้งแต่เลข 1-9

DataFrame

เป็นชนิดของข้อมูลที่คล้าย table หรือ การจัดเก็บข้อมูลแบบ 2 มิติ ในแต่ column จะประกอบไปด้วยข้อมูล และในแต่ละ row จะประกอบไปด้วย Set ของข้อมูลของแต่ละ Column

coin_id <- c(1:4)
coin <- c("bitcoin", "kub coin", "doge coin", "shiba inu")
price <- c("2000000.0", "80.0", "9.5", "0.03")
data.frame(coin_id ,coin, price)


If - Else
Statement

การใช้ If Else ในภาษา R จะมีความคล้ายคลึงกันทำให้สามารถเขียนแล้วเข้าใจได้ง่าย ซึ่ง If Else นั้นจะเอาไว้ใช้ในการตรวจสอบเงื่อนไขถ้า...แล้วให้ทำ… เช่น

token_price = 200
if (token_price > 1000){  print("Sell!!")}else{  print("Buy!!")}[1] "Buy!!"


การใช้ For Loop ในภาษา R นั้นก็มีลักษณะคล้ายกับภาษา Python ซึ่ง For Loop ใช้ในการวนลูปชุดข้อมูล เช่น
FOR LOOP

For ( i in dataset){

“Do something”

for(i in c("bitcoin", "kub coin", "doge coin", "shiba inu")){  print(i)}

 

เมื่อทำการรันคำสั่งก็จะได้ผลลัพธ์ดังนี้ครับ

> for (i in c("bitcoin", "kub coin", "doge coin", "shiba innu")){+ print(i)+ }[1] "bitcoin"[1] “kub coin"[1] “doge coin"[1] "shiba inu"

Fizz buzz Code

โดยโจทย์นี้เป็นให้แสดงคำว่า 

  • Fizz หากตัวเลขที่ส่งเข้าไปสามารถหารด้วย 3 ลงตัว 
  • Buzz หากตัวเลขที่ส่งเข้าไปสามารถหารด้วย 5 ลงตัว
  • Fizz-buzz หากตัวเลขที่ส่งเข้าไปสามารถหารด้วย 3 และ 15 ลงตัว

โดยครั้งนี้เราจะมาเตรียม test กันก่อนนะครับ

  1. ทำการสร้าง Folder -> testthat
  2. สร้างไฟล์ My_code.R  ใช้ในการเขียนฟังก์ชัน
  3. สร้างไฟล์ Test_my_code.R ใช้ในการเขียน Test case กันครับ

จากนั้นเริ่มทำการเขียน Test case กันก่อนโดยเริ่มจาก Case แรก

  • Fizz หากตัวเลขที่ส่งเข้าไปสามารถหารด้วย 3 ลงตัว 

ขั้นตอนการเขียนเทสโดยใช้ Library test_that () ส่วนในฟังก์ชัน expect_equal ใช้ในการเปรียบเทียบค่าครับว่าเท่ากันหรือไม่

test_that("test name", {
expect_equal(valueA, valueB)}

test_my_code.R

library(testthat) #-> import library
source("my_code.R", chdir = TRUE) # -> file code
test_that("test input 3 should return fizz", {  expect_equal(fizz_buzz(3), "fizz")})

 

ส่วนใน Code ก็จะทำการเขียนฟังก์ชัน Fizzbuzz รับ Number เข้ามาตรวจสอบว่าถ้ามันเป็นตัวเลข 3 ให้ทำการ Return fizz กลับไปครับ 

My_code.R

fizz_buzz <- function(number){  if (number == 3){    return("fizz")  }}

 

เมื่อทำการรัน Unittest โดยใช้ โดยจะทำการรันด้วยคำสั่ง Testthat::test_dir () ส่วนใน test_dir() นั้นจะเป็น Pathไปยัง Test/testthat

testthat::test_dir("~/learntoday2/fiss_buzz/test/testthat")


จากรูปจะเห็นว่าทำการรัน Unittest ที่ทำการเขียนไว้ ส่วนกรณีที่ Testcase Fail นั้นก็จะทำการบอกว่า มันมีค่าอะไรที่ไม่ตรงกัน ก็จะไปทำการแก้ให้ผ่าน

เมื่อเขียน coe และ unittest เสร็จ ก็จะได้โค้ดที่ประมาณนี้ครับ อาจจะมีแตกต่างกันบ้างแล้วแต่วิธีการเขียนของเพื่อน ๆ ครับ ซึ่งก็ไม่ผิดครับ

Test_my_code.R

library(testthat)
source("my_code.R", chdir = TRUE)
test_that("test input 3, 6, 9 should return fizz", {  expect_equal(fizz_buzz(3), "fizz")  #expect_equal(fizz_buzz(6), "fizz")  #expect_equal(fizz_buzz(9), "fizz")})
test_that("test input 5, 10, 20 should return buzz", {  expect_equal(fizz_buzz(5), "buzz")  expect_equal(fizz_buzz(10), "buzz")  expect_equal(fizz_buzz(20), "buzz")})
test_that("test input 15, 30, 45 should return fizz-buzz", {  expect_equal(fizz_buzz(15), "fizz-buzz")  expect_equal(fizz_buzz(30), "fizz-buzz")  expect_equal(fizz_buzz(45), "fizz-buzz")})

 

My_code.R

fizz_buzz <- function(number){  if (number %% 3 == 0 && number %% 5 == 0){    return("fizz-buzz")  }  else if(number %% 3 == 0){    return("fizz")  }  else if(number %% 5 == 0){    return("buzz")  }}

​​คีย์ลัด

  • CMD/Ctr + Enter ใช้ในการรันไฟล์
  • control/Ctr + L ใช้ในการเคลียร์หน้าต่าง

สรุป

สำหรับตัว R Very Basic 101 นั้นก็จะประกอบไปด้วยข้อมูล

  • การประการตัวแปร
  • ชนิดของข้อมูล Datatype
  • If - Else Statement
  • For loop
  • Fizz buzz code

ซึ่งก็จะสามารถทำให้เพื่อนสามารถที่จะนำเนื้อหาภายในบล็อกนี้มาใช้เบื้องต้นในการเขียนฟังก์ชันในการคำนวน หรือจะเอาไปต่อยอดในการทำสถิติต่าง ๆ ได้ครับ

 

อ้างอิง

Written by
Senna Labs
Senna Labs

Subscribe to follow product news, latest in technology, solutions, and updates

- More than 120,000 people/day visit to read our blogs

Let’s build digital products that are
simply awesome !

We will get back to you within 24 hours!Go to contact us
Please tell us your ideas.
- Senna Labsmake it happy
Contact ball
Contact us bg 2
Contact us bg 4
Contact us bg 1
Ball leftBall rightBall leftBall right
Sennalabs gray logo28/11 Soi Ruamrudee, Lumphini, Pathumwan, Bangkok 10330+66 62 389 4599hello@sennalabs.com© 2022 Senna Labs Co., Ltd.All rights reserved.