09Feb, 2022
ภาษา :
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

บทความอื่นๆ

19
September, 2024
JS class syntax
19 September, 2024
JS class syntax
เชื่อว่าหลายๆคนที่เขียน javascript กันมา คงต้องเคยสงสัยกันบ้าง ว่า class ที่อยู่ใน js เนี่ย มันคืออะไร แล้วมันมีหน้าที่ต่างกับการประกาศ function อย่างไร? เรามารู้จักกับ class ให้มากขึ้นกันดีกว่า class เปรียบเสมือนกับ blueprint หรือแบบพิมพ์เขียว ที่สามารถนำไปสร้างเป็นสิ่งของ( object ) ตาม blueprint หรือแบบพิมพ์เขียว( class ) นั้นๆได้ โดยภายใน class

By

4 mins read
Thai
19
September, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
19 September, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
ผู้ให้บริการเครือข่ายในสหรัฐฯ ได้เปิดตัว 5G ในหลายรูปแบบ และเช่นเดียวกับผู้ให้บริการเครือข่ายในยุโรปหลายราย แต่… 5G มันคืออะไร และทำไมเราต้องให้ความสนใจ บทความนี้ได้รวบรวม 15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G เพราะเราปฏิเสธไม่ได้เลยว่ามันกำลังจะถูกใช้งานอย่างกว้างขวางขึ้น 1. 5G หรือ Fifth-Generation คือยุคใหม่ของเทคโนโลยีเครือข่ายไร้สายที่จะมาแทนที่ระบบ 4G ที่เราใช้อยู่ในปัจจุบัน ซึ่งมันไม่ได้ถูกจำกัดแค่มือถือเท่านั้น แต่รวมถึงอุปกรณ์ทุกชนิดที่เชื่อมต่ออินเตอร์เน็ตได้ 2. 5G คือการพัฒนา 3 ส่วนที่สำคัญที่จะนำมาสู่การเชื่อมต่ออุปกรณ์ไร้สายต่างๆ ขยายช่องสัญญาณขนาดใหญ่ขึ้นเพื่อเพิ่มความเร็วในการเชื่อมต่อ การตอบสนองที่รวดเร็วขึ้นในระยะเวลาที่น้อยลง ความสามารถในการเชื่อมต่ออุปกรณ์มากกว่า 1 ในเวลาเดียวกัน 3. สัญญาณ 5G นั้นแตกต่างจากระบบ

By

4 mins read
Thai
19
September, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
19 September, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
ในปัจจุบันนี้ ปฏิเสธไม่ได้เลยว่าภาษาที่ถูกใช้ในการเขียนเว็บต่าง ๆ นั้น คงหนีไม่พ้นภาษา Javascript ซึ่งเป็นภาษาที่ถูกนำไปพัฒนาเป็น framework หรือ library ต่าง ๆ มากมาย ผู้พัฒนาหลายคนก็มีรูปแบบการเขียนภาษา Javascript ที่แตกต่างกัน เราเลยมีแนวทางการเขียนที่หลากหลาย มาแบ่งปันเพื่อน ๆ เกี่ยวกับการจัดการ Array ด้วยภาษา Javascript กัน เรามาดูตัวอย่างกันเลยดีกว่า โดยปกติแล้วการ copy ค่าจาก value type ธรรมดา สามารถเขียนได้ดังนี้

By

4 mins read
Thai

Let’s build digital products that are
simply awesome !

We will get back to you within 24 hours!ติดต่อเรา
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.