letters [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[20] "t" "u" "v" "w" "x" "y" "z"
หลักการที่สำคัญของภาษาอาร์ ที่ควรสังเกตุและจดจำคือ ว่าตัวแปรต่างๆในอาร์นั้น เป็นวัตถุ(object) หรือฟังก์ชัน(function)?
หลักการสังเกตุ คือ ถ้าเป็นวัตถุจะสามารถเรียกใช้โดยพิมพ์แค่ชื่อ ก็จะแสดงค่าของวัตถุนั้นออกทั้งหมด ตามประเภทของชนิดข้อมูล ถ้าต้องเรียกใช้บางส่วน จะตามมักจะตามด้วยเครื่องหมายวงเล็บปิด [ ] โดยจะต้องมีการระบุตำแหน่งภายในที่ต้องการแสดง โดยขึ้นอยู่กับประเภทของข้อมูล
letters [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[20] "t" "u" "v" "w" "x" "y" "z"
หรือ
letters[1:5][1] "a" "b" "c" "d" "e"
แต่ถ้าเป็นฟังก์ชัน จะไม่สามารถพิมพ์แต่ชื่อได้ จะต้องพิมพ์ชื่อและตามด้วยเครื่องหมายวงเล็บเปิด ( ) เสมอ โดยที่ฟังก์ชันนั้นจะใส่ค่าที่ต้องการภายวงเล็บหรือไม่ได้ก็ได้ ขึ้นอยู่กับตัวฟังก์ชันเอง โดยฟังก์ชันนั้นมีหน้าที่ในการประมวลผลตามที่ผู้เขียนต้องการ
ถ้าเรียกใช้ฟังก์ชันโดยไม่ใส่วงเล็บ ( ) จะได้ผลดังตัวอย่างต่อไปนี้
meanfunction (x, ...)
UseMethod("mean")
<bytecode: 0x7ff2c2160f60>
<environment: namespace:base>
จะเห็นว่า ไม่สามารถใช้งานได้ หรือแสดงผลลัพธ์ตามที่ต้องการ
mean(x = 1:5)[1] 3
ตัวอย่างฟังก์ชันที่ไม่จำเป็นต้องใส่ค่าภายใน ก็คือ
install_tinytex( )
# จะเรียกใช้งานได้ ก็ต่อเมื่อเรียกใช้คำสั่ง library(tinytex) แล้วเท่านั้นในภาษาอาร์ค่าตัวแปรทุกชนิด ถูกมองเป็นวัตถุ (object) โดยวัตถุที่มีขนาดเล็กที่สุด(มีค่าเดียว) คือตัวแปรประเภท
ตัวเลขจำนวนจริง (numeric หรือ double)
จำนวนนับ (integer)
จำนวนเชิงซ้อน (complex)
ค่าตรรกศาสตร์ (logical)
ตัวอักษร (character)
ข้อมูลกลุ่ม (factor)
ตัวอย่าง
3.5 # numeric
3L # integer
10+2i # complex
TRUE # logical
"Somsak Chanaim" # characterเราสามารถตรวจสอบชนิดของวัตถุในอาร์ ได้ด้วยใช้คำสั่งดังต่อไปนี้
typeof( )
mode( )
storage.mode( )
class( )
str( )
typeof(2)[1] "double"
class(2L)[1] "integer"
storage.mode("3")[1] "character"
mode(TRUE)[1] "logical"
str(T) logi TRUE
ตารางต่อไปนี้แสดงความแตกต่างที่เป็นไปได้ ของผลลัพธ์เมื่อใช้ฟังก์ชัน typeof( ) , storage.mode( ) และ mode( ) ในการตรวจสอบวัตถุ
| typeof | storage.mode | mode |
|---|---|---|
| logical | logical | logical |
| integer | numeric | integer |
| double | numeric | double |
| complex | complex | complex |
| character | character | character |
ในการตรวจสอบวัตถุ บ้างครั้งเราต้องทราบว่า วัตถุนี้เป็น ตัวเลขหรือไม่? ผลลัพธ์ที่ได้จากตรวจสอบจะเป็นค่าทางตรรกศาสตร์ ทีให้ค่าออกมาเป็นจริง (TRUE หรือ T) หรือเท็จ (FALSE หรือ F)
โดยมีวิธีการจำคำสั่งแบบง่ายๆ คือ การตรวจสอบวัตถุว่าใช่หรือไม่ใช่ จะเริ่มต้นด้วย is. และตามประเภทหรือชนิดของวัตถุ เช่น
is.character( )
is.numeric( )
is.logical( )
is.complex( )
is.factor( )
เป็นต้น
ข้อมูลตัวเลขในอาร์ เป็นไปได้ทั้งด้วยข้อมูลประเภทจำนวนจริง จำนวนเต็ม เราสามารถตรวจสอบว่าวัตถุเป็นตัวเลขด้วยฟังก์ชัน mode( ) หรือตรวจสอบว่าเป็นตัวเลขใช่หรือไม่ด้วย is.numeric( ) หรือ is.double( )
mode(55)[1] "numeric"
is.numeric(55) [1] TRUE
is.double(55)[1] TRUE
ตัวแปรชนิดพิเศษที่ถือว่าเป็นตัวเลข คือ
Inf, -Inf คือ ค่าอนันต์ (infinity) ในทางคณิตศาสตร์
NaN มาจาก Not a Number
คำว่า Inf และ NaN เป็นตัวอักษรที่ไม่สามารถใช้ในการตั้งตัวแปรได้ หรือเป็นคำสงวน (reserve words)
typeof(Inf) [1] "double"
typeof(-Inf) [1] "double"
typeof(NaN) # "double"[1] "double"
is.numeric(Inf)[1] TRUE
is.double(NaN)[1] TRUE
ในการสร้างตัวแปรประเภทจำนวนเต็ม ให้เลขตัวเลขจำนวนเต็มที่ต้องการและต่อด้วยเครื่องหมาย L เช่น
1L[1] 1
100L[1] 100
ในการตรวจว่าวัตถุเป็นจำนวนเต็มหรือไม่? ให้ใช้คำสั่ง is.interger( )
ตัวอย่าง
is.integer(5)[1] FALSE
is.integer(5L)[1] TRUE
ในภาษาอาร์ จำนวนเต็ม (integer) เป็นข้อมูลชนิดตัวเลข (numeric) แต่ข้อมูลชนิดตัวเลขไม่จำเป็นต้องเป็นจำนวนเต็ม
is.numeric(5L)[1] TRUE
ค่าตรรกศาสตร์ในอาร์มี 3 ค่า คือ
TRUE
FALSE
NA มาจาก “Not Available” หรือ “Missing Value”
typeof(TRUE) # "logical"[1] "logical"
typeof(FALSE) # "logical"[1] "logical"
typeof(NA) # "logical"[1] "logical"
สำหรับภาษาอาร์ค่า TRUE สามารถเขียนโดยย่อโดยใช้ T และค่า FALSE สามารถเขียนโดยย่อโดยใช้ F
typeof(T) [1] "logical"
typeof(F)[1] "logical"
คำว่า T และ F ไม่ใช่คำสงวน ดังนั้น จึงสามารถกำหนดให้เป็นชื่อตัวแปรได้แต่ไม่ควรทำเป็นอย่างยิ่ง สำหรับผู้เริ่มใช้ภาษาอาร์ ขอแนะนำให้ กำหนดค่าตรรกศาสตร์ด้วยคำเต็มเสมอ
a <- T
is.logical(a)[1] TRUE
F <- 2
is.logical(F)[1] FALSE
เราไม่สามารถใช้คำสงวนในตั้งชื่อตัวแปรได้
FALSE <- 2 Error in FALSE <- 2: invalid (do_set) left-hand side to assignment
จำนวนเชิงซ้อนประกอบไปส่วนที่เป็นจำนวนจริงบวกกับจำนวนจินตภาพ สามารถเขียนได้อยู่ในรูป
\[a+bi\] โดยที่ a และ b เป็นจำนวนจริง และ i หมายถึงค่า \(\sqrt{-1}\)
ในภาษาอาร์สร้างได้ดังตัวอย่างต่อไปนี้
2 + 3i[1] 2+3i
1.5 + 3.2i[1] 1.5+3.2i
2L + 3i[1] 2+3i
และสามารถตรวจสอบว่า วัตถุเป็นจำนวนเชิงซ้อนหรือไม่ได้โดยคำสั่ง is.complex( )
is.complex(2 + 3i) # TRUE[1] TRUE
โดยปกติแล้ว ตัวเลขจำนวนจินตภาพไม่ได้ค่อยได้ถูกใช้งาน ยกเว้นในงานทางคณิตศาสตร์และทางวิศวะกรรม
เราสามารถสร้างวัตถุหรือข้อมูลตัวอักษร โดยใช้ภาษาหรือตัวเลขใดๆ ขึ้นมาก็ได้ โดยต้องอยู่ในเครื่องหมายคำพูด \("\) \("\)
เป้าหมายของข้อมูลประเภทคือ ก็คือการจัดกลุ่มโดยไม่ต้องสนใจลำดับก่อนหลัง เช่น ชื่อสัตว์บก กระทรวงต่างๆ ในประเทศไทย จังหวัดในประเทศไทย ทิศต่างๆ เป็นต้น
"R is harder than Python"[1] "R is harder than Python"
"3"[1] "3"
"สมศักดิ์"[1] "สมศักดิ์"
"วิทยาลัยนานาชาตินวัตกรรมดิจิทัล"[1] "วิทยาลัยนานาชาตินวัตกรรมดิจิทัล"
และสามารถตรวจสอบว่า วัตถุนี้เป็นชนิดตัวษรหรือไม่? ได้โดยใช้คำสั่ง is.character( )
is.character("R is harder than python")[1] TRUE
is.character("3")[1] TRUE
is.character(3)[1] FALSE
สำหรับวัตถุชนิดอักษร เว้นวรรคถึงเป็นหนึ่งตัวอักษร และเราสามารถนับตัวอักษรได้โดยใช้คำสั่ง nchar( ) เช่น
nchar("The quick brown fox jumps over the lazy dog.")[1] 44
เป็นตัวแปรชนิดตัวอักษรที่ต้องกำหนดลำดับก่อนหลังให้ก่อน เพื่อประโยชน์ในการเปรียบเทียบ เช่น ใน 1 สัปดาห์ประกอบไปด้วยวันจันทร์ถึงวันอาทิตย์ ใน 1 ปีมี 12 เดือนคือ ม.ค. ถึง ธ.ค. ซึ่งจะเห็นได้ชื่อเหล่านี้มีลำดับชัดเจน ชื่อใดมาก่อนหลัง หรือมีปัจจัยใดมีค่ามากกว่ากันแม้จะไม่สามารถวัดด้วยจำนวนได้ เช่น ระดับการศึกษาต่างๆ จาก ปฐมศึกษาจนถึงอุดมศึกษา หรือลำดับชั้นยศทางทหารเป็นต้น
ข้อมูลชนิดนี้จะกล่าวโดยละเอียดในบทต่อไปในหัวข้อที่ 4.5
ข้อมูลบ้างชนิดสามารถเปลี่ยนไปชนิดอื่นๆ ได้ แต่บ้างชนิดก็ไม่สามารถเปลี่ยนได้ สำหรับคำสั่งที่ใช้เปลี่ยน จะขึ้นต้น as. และตามด้วยชนิดของวัตถุที่ต้องการจะเปลี่ยน
โดยมีตัวอย่างตามตารางดังนี้
| คำสั่ง | เปลี่ยนวัตถุเป็น |
|---|---|
| as.numeric | ตัวเลข |
| as.integer | จำนวนเต็ม |
| as.double | ตัวเลข |
| as.character | อักษร |
| as.logical | ตรรกศาสตร์ |
| as.factor | ปัจจัย |
เปลี่ยนตัวเลขจำนวนเต็ม
a <- 3
a <- as.integer(a)
is.integer(a)[1] TRUE
เปลี่ยนค่าตรรกศาตร์เป็นตัวเลข
b<- as.numeric(TRUE)
as.numeric(b) [1] 1
เปลี่ยนตรรกศาตร์เป็นวัตถุอักษร
c <- as.character(TRUE)
c[1] "TRUE"
ในหลายกรณีบ้างค่าของวัตถุก็ไม่สามารถเปลี่ยนไปเป็นวัตถุที่ต้องการได้ เช่น
as.integer("A")Warning: NAs introduced by coercion
[1] NA
as.integer("THREE")Warning: NAs introduced by coercion
[1] NA
หลักพื้นฐานที่ควรทราบเมื่อต้องการเปลี่ยนชนิดของวัตถุ
วัตถุทุกชนิดเปลี่ยนวัตถุตัวอักษรได้
วัตถุจำนวนเต็มทุกค่าเปลี่ยนตัวเลขได้
วัตถุตัวอักษรที่เขียนเป็นตัวเลขเท่านั้น จึงจะเปลี่ยนค่าเป็นตัวเลขได้ เช่น
as.numeric("3")[1] 3
ค่าทางตรรกศาสตร์ TRUE มีค่าเป็นตัวเลข 1 และค่าตรรกศาสตร์ FALSE มีค่าเป็นตัวเลข 0
เมื่อมีการทำงานหรือประมวลผลด้วยภาษาอาร์ ในหลายกรณีเราจะทำการเก็บค่าต่างๆ ไว้ในรูปของตัวแปร และจะถูกเก็บไว้ในหน่วยความจำของเครื่องคอมพิวเตอร์ ดังนั้น ข้อมูลจากหน่วยความจำนี้ สามารถที่จะบรรทึกเก็บไว้ หรือส่งต่อไปให้กับบุคคลอื่นๆ ในรูปของไฟล์ข้อมูล เพื่อเรียกใช้งานได้ต่อไป ก็จะมีคำสั่งที่จำเป็นที่ผู้อ่านควรรู้ เพื่อความสะดวกในการทำงานกับภาษาอาร์
ก่อนที่จะมีโปรแกรมประเภท RStudio เกิดขึ้น เป็นการยากที่เราจะทราบว่า เรามีตัวแปรกี่ตัวและชนิดใดบ้างถูกเก็บไว้ในหน่วยความจำ คำสั่ง ls( ) เป็นการแสดงชื่อตัวแปรทั้งหมดที่ถูกเก็บไว้ในหน่วยความจำ ในพื้นที่ใช้งานของเรา เช่น ถ้าเราสร้างตัวแปร ขึ้นมา 2 ตัวดังนี้
num.1 <- 1:10
num.2 <- c(log(50),log(100))คำสั่ง ls( ) จะแสดงชื่อตัวแปรทั้งหมดที่มีออกมา
ls( )[1] "a" "b" "c" "F" "num.1" "num.2"
หลังจากที่มีโปรแกรม RStudio เกิดขึ้น เราจะสามารถเห็นตัวแปรทั้งหมดจากหน้าต่าง Environment
การลบตัวแปรออกจากพื้นที่การทำงาน สามารถทำได้โดยใช้คำสั่ง rm( ) ในกรณีที่ต้องการลบตัวแปรออกเพียง 1 ตัว เช่น ต้องการลบ num.1 ออกพื้นที่การทำงาน ทำได้ดังนี้
rm(num.1)ตรวจสอบพื้นที่การงาน โดยใช้คำสั่ง ls( )
ls( )จะเห็นว่าตัวแปร num.1 ถูกลบออกไปแล้ว
ในกรณีที่ต้องการลบตัวออกหลายตัว ขอให้ผู้อ่านศึกษาเรื่องตัวแปรชนิดเวคเตอร์ (vector) เสียก่อน ก็จะสามารถเข้าใจได้โดยง่ายว่าต้องทำอย่างไร
ในกรณีที่ต้องการลบตัวทั้งหมดในพื้นที่การทำงานออกไปสามารถทำได้โดยใช้คำสั่งนี้
rm(list = ls( ))ตรวจสอบพื้นที่การทำงานด้วยคำสั่ง ls( ) อีกครั้ง
ls( )character(0)
ก็จะพบว่าไม่มีตัวแปรใดๆ อยู่ในหน่วยความจำ
หมายเหตุ character(0) หมายถึง ในพื้นที่การทำงานไม่มีตัวใดๆ อยู่แล้ว ถ้าใน หน้าต่างของ RStudio จะปรากฏภาพดังนี้
เราสามารถลบตัวแปรออกไปหน่อยหน่วยความจำได้ โดยกำหนดค่าให้ตัวแปรที่ต้่องการเท่ากับ NULL เช่น
num.1 <- NULLถ้าต้องการบันทึกตัวแปรทุกตัวในพื้นที่การทำงาน สามารถใช้คำสั่ง save.image( )
save.image(file = "ชื่อไฟล์ที่ต้องการ.Rdata")ตัวอย่าง สร้างวัตถุขึ้นมา 3 ตัวให้มีชื่อ x y และ z
x <- 20
y <- 34
z <- "house"ทำการบันทึกในชื่อไฟล์ My_Object.RData
save.image(file = "My_Object.RData")ในกรณีที่ต้องบันทึกแค่ตัวแปรบางตัว เช่น ต้องการบันทึก ตัว x และ z ในชื่อไฟล์ My_Two_Objects.RData ในกรณีนี้ให้ใช้คำสั่ง save( )
save(y, z, file = "My_Two_Objects.RData")ถ้าต้องการบันทึกตัวแปรไว้แค่เพียงตัว แนะนำให้ใช้คำสั่ง saveRDS( ) และไฟล์นามสกุล rds
saveRDS(x, file = "my_object.rds")ถ้าเป็นไฟล์สกุล RData สามารถใช้คำสั่ง load( ) และระบุชื่อไฟล์ในเครื่องหมายคำพูด \("\)ไฟล์.RData\("\)
load("My_Two_Objects.RData")และใช้คำสั่ง readRDS( ) สำหรับเรียกใช้ไฟล์สกุล rds โดยมีการเรียกใช้งานเหมือนกับคำสั่ง load( )
readRDS("my_object.rds")[1] 20
เพื่อให้การทำงานสะดวกขึ้น ควรเก็บทุกไฟล์เกี่ยวข้องไว้ในโฟลเดอร์เดียวกันเสมอ เพื่อให้ง่ายต่อการเรียกใช้ หรือส่งต่อให้ผู้อื่น
ในกรณีของการทำงานด้วย Rmarkdown ถ้ามีการบันทึกตัวแปรเกิดขึ้น ไฟล์ที่สร้างขึ้นจะอยู่ในโฟลเดอร์เดียวไฟล์ Rmd โดยอัตโนมัติ
แต่สำหรับทำงานที่เขียนโปรแกรมด้วย ไฟล์สกุล R จำเป็นต้องมี ปรับแต่งโฟลเดอร์ที่จะใช้ การบันทึกไฟล์ข้อมูลก่อน เพื่อง่ายต่อการใช้งาน และค้นหาไฟล์ที่บันทึกไว้
คำสั่งที่ใช้คือ getwd( ) สำหรับผู้ได้กำหนดให้ข้อมูลหรือไฟล์ที่เกี่ยวข้องอยู่ใน
getwd( )[1] "/Users/somsak_mac2/Documents/R/DataVizWithR/DATA Viz/chapter3"
ถ้าต้องการเปลี่ยนโฟลเดอร์ในการจัดเก็บงานต่างๆ สามารถใช้คำสั่ง setwd( ) เช่น
setwd("/Users/somsak_mac2/Documents/R/")เหมาะการเริ่มต้นการทำงานใหม่ด้วยอาร์ สามารถดูเมนูได้จากภาพด้านล่าง
คู่มือการใช้่งานอาร์สามารถโหลดได้จาก
https://cran.r-project.org/manuals.html
จากตารางด้านล่าง หนังสือภาษาอังกฤษที่แนะให้อ่านเพิ่มเติม สำหรับใช้งานอาร์เบื้องต้น คือ
| ชื่อหนังสือ | ระดับ |
|---|---|
| An Introduction to R | ง่ายและขั้นกลาง |
| R Data Import/Export | ง่ายและขั้นกลาง |
| R Installation and Administration | สูง |
| Writing R Extensions | สูง |
| R language definition (Draft) | สูง |
| R Internals | สูง |
| The R Reference Index | สูง |
สำหรับรายชื่อหนังสือ จากดูเวบลิงห์ถัดไป
ทุกๆ ชุดคำสั่งในอาร์มีมือคู่มือการใช้งานในรูปแบบเวบไซต์หรือ pdf
ตัวอย่างเช่น คู่มือใช้งานชุดคำสั่ง ggplot2 ในรูปแบบเวบไซต์
สำหรับคู่มือฉบับ pdf สามารถโหลดได้จากเวบ cran-r เช่น https://cran.r-project.org/web/packages/ggplot2/ggplot2.pdf
สำหรับมือใหม่ สามารถใช้คำสั่ง help.start( ) ใน RStudio เพื่อค้นหาความช่วยเหลือที่ต้องการ
help.start( ) วิธีใช้ที่ได้จะเป็น HTML จะเปิดขึ้น หลังจากนั้น เราสามารถเข้าถึงคู่มือ เอกสารอ้างอิง และเนื้อหาเบ็ดเตล็ดหรือเฉพาะเจาะจงได้
ถ้าเราต้องการอ่านรายละเอียดเพิ่มเกี่ยวกับคำสั่งที่ใช้งาน สามารถใช้คำสั่ง help( ) และใส่ชื่อคำสั่งที่ต้องการทราบลงไป เช่น เราอยากทราบว่า คำสั่ง rnorm( ) คืออะไร
help(rnorm)หรือสามารถใช้อีกรูปแบบ ใช้เครื่องหมายคำถาม ? อยู่หน้าคำสั่งที่ต้องการทราบโดยไม่ต้องเว้นวรรค
?rnorm วิธีใช้จะอยู่ในรูปแบบ HTML และจะมีคำอธิบายคำสั่ง อาร์กิวเมนต์พร้อมคำจำกัดความ และตัวอย่างการใช้งาน
สามารถใช้คำสั่ง help( ) หรือ ? แล้วใส่ชื่อชุดคำสั่งที่ต้องการลงไป
help(stats)
?stats ในกรณีที่ไม่ที่ว่ามีคำสั่งที่เราต้องการหรือไม่ หรือเราเพียงบ้างคำของชุดคำสั่ง เราสามารถค้นหาคำสั่งที่คำที่คำต้องการอยู่หรือไม่ เช่น ถ้าใช้คำว่า median ค้นหา ก็ได้ข้อมูล ที่เป็นทั้งคำตรง และคำใกล้เคียงปรากฏขึ้น
help.search("median")หมายเหตุ ต้องใช้คำที่ต้องการค้นหาให้อยู่ในเครื่องหมายคำพูดเสมอ
นอกจากนี้เรายังสามารถค้นหาคำสั่งจากชุดคำสั่งที่เฉพาะเจาะจงก็ได้ ดังตัวอย่างต่อไปนี้
help.search("sd", package = "stats")เมื่อต้องการค้นหาหัวข้อใดหัวข้อหนึ่ง หรือเมื่อสามารถจำชื่อคำสั่งได้เพียงบางส่วน เราสามารถค้นหาข้อความนั้นด้วยฟังก์ชัน apropos( ) ตัวอย่างเช่น ในกรณีที่ต้องการค้นหาฟังก์ชันที่เกี่ยวข้องกับ plot( ) ด้วยคำสั่ง apropos( ) จะแสดงคำสั่งทั้งหมดที่มีคำว่า \("\)plot\("\) อยู่ในชื่อของคำสั่ง
apropos("plot", mode = "function") [1] "assocplot" "barplot" "barplot.default"
[4] "biplot" "boxplot" "boxplot.default"
[7] "boxplot.matrix" "boxplot.stats" "cdplot"
[10] "coplot" "fourfoldplot" "interaction.plot"
[13] "lag.plot" "matplot" "monthplot"
[16] "mosaicplot" "plot" "plot"
[19] "plot.default" "plot.design" "plot.ecdf"
[22] "plot.function" "plot.new" "plot.spec.coherency"
[25] "plot.spec.phase" "plot.stepfun" "plot.ts"
[28] "plot.window" "plot.xy" "preplot"
[31] "qqplot" "recordPlot" "replayPlot"
[34] "savePlot" "screeplot" "spineplot"
[37] "sunflowerplot" "termplot" "ts.plot"
จะเห็นว่าการค้นหาที่ มีคำสั่งที่ปรากฏ มีคำสั่งว่า Plot หรือมีคำว่า plot ปรากฏด้านหน้า ระหว่างคำ หรือ ด้านหลัง
ถ้าเราสนใจเฉพาะคำสั่งที่มีแต่คำว่า plot ปรากฏขึ้นเป็นคำหน้าเท่านั้น ก็สามารถทำได้โดยใส่ เครื่องหมาย ^ นำหน้า plot เพื่อทำการค้นหา เช่น
apropos("plot^", mode = "function")character(0)
apropos("^plot", mode = "function") [1] "plot" "plot" "plot.default"
[4] "plot.design" "plot.ecdf" "plot.function"
[7] "plot.new" "plot.spec.coherency" "plot.spec.phase"
[10] "plot.stepfun" "plot.ts" "plot.window"
[13] "plot.xy"
ถ้าเครื่องคอมพิวเตอร์ที่ใช้เชื่อมต่อกับอินเทอร์เน๊ต เราสามารถใช้คำสั่ง
RSiteSearch( ) ค้นหาจากบรานเซอร์หลักที่เราเลือกใช้ เช่น
RSiteSearch("plot")คำแนะนำสำหรับการใช้งานคำสั่ง จากชุดชุดคำสั่ง เช่น ggplot2 หรือ dplyr สามารถโหลดได้จาก https://RStudio.com/resources/cheatsheets/
หรือจากในเมนูใน RStudio ก็ได้
คำสั่งนี้จะแสดงชื่อข้อมูล พร้อมคำอธิบาย สำหรับข้อมูลสามารถเลือกใช้งานได้ทันที
data( )ถ้าเรามีชุดคำสั่งภายในเครื่องคอมพิวเตอร์ของเราหลายชุด เราสามารถค้นหาชุดข้อมูล และทราบได้ว่าข้อมูลนั้นมาจากชุดคำสั่งอะไร โดยใช้คำสั่ง
data(package = .packages(all.available = TRUE))เราสามารถใช้ค้นหารายละเอียดของชุดข้อมูลที่ต้องการโดยคำสั่ง help( ) หรือ ? ก็ได้
เช่น
help("cars")or
?carsกรณีที่เราต้องการ เห็นผลลัพธ์ตัวอย่างจากการใช้งานคำสั่ง สามารถพิมพ์คำสั่งที่ต้องการในเครื่องหมายคำพูด ใส่ในคำสั่ง example( ) เช่น ตัวอย่างการงานคำสั่ง mean
example("mean")
mean> x <- c(0:10, 50)
mean> xm <- mean(x)
mean> c(xm, mean(x, trim = 0.10))
[1] 8.75 5.50
ให้ผู้อ่านใช้คำสั่งต่อไปนี้
example("var")
example("plot")ภาษาอาร์มีตัวดำเนินการหลายแบบ เช่น
ตัวดำเนินการเลขคณิต (arithmetic operators) สำหรับการคำนวณทางคณิตศาสตร์
ตัวดำเนินการเชิงสัมพันธ์ (relational operators) สำหรับการเปรียบเทียบค่าต่างๆแล้วได้ผลลัพธ์เป็น TRUE หรือ FALSE ที่เป็นเพียงหนึ่งประพจน์
ตัวดำเนินการแบบตรรกศาสตร์ (logical operators) สำหรับการหาผลลัพธ์ของ สองประพจน์ข้ึนไป แล้วได้ผลลัพธ์เป็นค่า TRUE หรือ FALSE
ตัวดำเนินการกำหนด (assignment operators) เป็นสร้างตัวแปรขึ้นมาให้เป็นชื่อเรียกต่างๆ เพื่อเก็บค่าไว้ในหน่วยความจำเพื่อให้พร้อมสำหรับการเรียกใช้งานโดยไม่ต้่องทำการประมวลผลใหม่
ตัวดำเนินการไปป์ (pipe operators) เป็นการขั้นการโค้ดด้วยภาษาอาร์ให้มีความกระชับการและอ่านได้ง่ายขึ้น
คือกระบวนการที่เกี่ยวข้องการคำนวณแบบต่างของตัวเลข เช่น บวก ลบ คูณ หาร เป็นต้น
| ตัวดำเนินการเลขคณิตในอาร์ | คำอธิบาย |
|---|---|
| + | การบวก (plus) |
| - | การหาร (minus) |
| * | การคูณ (multiplication) |
| / | การหาร (division) |
| ^ | การยกกำลัง (exponential) |
| ** | การยกกำลัง (exponential) |
| %% | การหารเอาเศษ (modulus) |
| %/% | การหารเอาส่วน (integer divide) |
| %*% | การคูณกับแบบเมตริกซ์ (matrix multiplication) |
ตัวอย่าง
การคำนวณง่ายๆ ด้วยจำนวนจริง
3 + 5 [1] 8
8 - 3 [1] 5
7 * 5 [1] 35
1/2 [1] 0.5
4 ^ 4 [1] 256
4 ** 4 [1] 256
5 %% 3 [1] 2
5 %/% 3 [1] 1
ใบบทต่อไปจะมีชนิดของตัวแปรที่เป็นเวคเตอร์ (vector)
สำหรับกระบวนการเลขคณิตสำหรับตัวแปรเวคเตอร์จะได้ผลลัพธ์ดังนี้
x <- c(1, 7, 3)
y <- c(9, 4, 5)
x + y [1] 10 11 8
x - y [1] -8 3 -2
x * y [1] 9 28 15
x / 2 [1] 0.5 3.5 1.5
x ** y [1] 1 2401 243
x ^ y [1] 1 2401 243
x %% y [1] 1 3 3
x %/% y [1] 0 1 0
จะเห็นได้ว่าเป็นการทำต่อกันสำหรับสำหรับตัวเลขที่อยู่ในลำดับหรือตำแหน่งเดียวกันเท่านั้น
สำหรับตัวแปรประเภทเมตริกซ์จะกล่าวถึงในบทต่อไป
เป็นเปรียบค่าจะหว่างกัน ของประพจน์ และได้ผลลัพธ์เป็น TRUE หรือ FALSE
| ตัวดำเนินการเชิงสัมพันธ์ | คำอธิบาย |
|---|---|
| > | มากกว่า (greater than) |
| < | น้อยกว่า (lower than) |
| >= | มากว่าหรือเท่ากับ (greater or equal than) |
| <= | น้อยกว่าหรือเท่ากับ (lower or equal than) |
| == | มีค่าเท่ากัน (equal to) |
| != | มีค่าไม่เท่ากัน (not equal to) |
ตัวอย่าง
3 > 5 [1] FALSE
3 < 5 [1] TRUE
3 >= 5 [1] FALSE
3 <= 5 [1] TRUE
3 == 5 [1] FALSE
3 != 5 [1] TRUE
สำหรับตัวแปรเวคเตอร์ จะเป็นการเปรียบเทียบแต่ละค่าที่ลำดับหรือตำแหน่งเดียวกัน
x <- c(12, 4 , 14)
y <- c(3, 4, 15)
x >= y [1] TRUE TRUE FALSE
x <= y [1] FALSE TRUE TRUE
x == y [1] FALSE TRUE FALSE
x != y [1] TRUE FALSE TRUE
เป็นการเชื่อมประพจน์ตั้งแต่สองประพจน์ขึ้น และได้ผลลัพธ์เป็นค่า TRUE หรือ FALSE
| ตัวดำเนินการแบบตรรกศาสตร์ | คำอธิบาย |
|---|---|
| \(\&\) | และ (AND) สำหรับเชื่อมตัวแปรที่มีค่าเดียว |
| \(\&\&\) | และ (AND) สำหรับเชื่อมตัวแปรที่เป็นเวคเตอร์หรือเมตริกซ์ |
| \(∣\) | หรือ (OR) สำหรับเชื่อมตัวแปรที่มีค่าเดียว |
| || | หรือ (OR) สำหรับเชื่อมตัวแปรที่เป็นเวคเตอร์หรือเมตริกซ์ |
| ! | นิเสธ (NOT) |
| xor( ) | นิเสธของหรือ (Not OR) |
กฏตรรกศาสตร์พื้นฐาน
ถ้าประพจน์ 2 ประพจน์ดำเนินการต่อกันด้วยเครื่องหมายและ
| ค่าตวามจริงประพจน์ A | ค่าตวามจริงประพจน์ B | ผลลัพธ์ A&B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | FALSE |
| FALSE | TRUE | FALSE |
| FALSE | FALSE | FALSE |
ถ้าประพจน์ 2 ประพจน์ดำเนินการต่อกันด้วยเครื่องหมายหรือ
| ค่าตวามจริงประพจน์ A | ค่าตวามจริงประพจน์ B | ผลลัพธ์ A|B |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | TRUE |
| FALSE | TRUE | TRUE |
| FALSE | FALSE | FALSE |
ค่านิเสธของประพจน์
| ค่าตวามจริงประพจน์ A | ผลลัพธ์ !A |
|---|---|
| T | F |
| F | T |
ตัวอย่าง
(3>5)&(4<2)[1] FALSE
(3>5)|(4<2)[1] FALSE
!(4==4)[1] FALSE
!(3>5)|(4<2) [1] TRUE
!((3>5)|(4<2)) [1] TRUE
คือการกำหนดชื่อให้ตัวแปรเพื่อเก็บค่าไว่ในหน่วยความจำ เพื่อให้ง่ายต่อการนำมาใช้งานซ้ำอีกครั้ง
| การดำเนินการ | คำอธิบาย |
|---|---|
| <- | กำหนดให้ตัวแปรทางซ้ายมีค่าเท่ากับค่าที่กำหนด |
| -> | กำหนดให้ตัวแปรทางขวามีค่าเท่ากับค่าที่กำหนด |
| = | กำหนดให้ตัวแปรทางซ้ายมีค่าเท่ากับค่าที่กำหนด (ไม่แนะนำใช้การเขียนรูปแบบนี้ ควรใช้ในกรณีที่กำหนดค่าให้กับตัวแปรในคำสั่งเท่านั้น) |
แต่เพื่อให้ง่ายต่อการอ่านโค้ดที่เขียนได้ง่านขึ้น ควรใช้ <- สำหรับการกำหนดค่าตัวแปรที่สามารถเห็นได้จากหน้าต่าง global environment ใน RStudio หรือค้นเจอด้วยคำสั่ง ls( ) หรือเป็น ดำเนินการให้ค่ากับตัวแปรภายในชุดคำสั่ง
ตัวอย่าง
x <- 3
3 -> yADD <- function(x,y){
result <- x + y
return(result)
}เมื่อกำหนดค่าให้ตัวแปร โปรแกรมอาร์จะไม่แสดงค่าของตัวแปรออก ดังนั้นถ้าต้องการเห็นค่าทางหน้าจอ ต้องพิมพ์ชื่อตัวแปร ในบรรทัดถัดไป
x[1] 3
y[1] 3
สำหรับตัวดำเนินการเท่ากับ (=) ควรใช้เพื่อกำหนดให้ตัวแปรภายในคำสั่งมีค่าเท่ากับที่เรากำหนด
ตัวอย่าง
ADD(x = 2, y = 3)[1] 5
rnorm(n = 2, mean = 0, sd = 2)[1] -1.463111 -1.879985
หลักการตั้งชื่อตัวแปร เราสามารถใช้ตัวอักษร ตัวเลข จุด(.) หรือขีดล่าง(_)ในชื่อตัวแปรได้ แต่ขีดล่างและตัวเลขไม่สามารถเป็นอักขระตัวแรกของชื่อตัวแปรได้ในอาร์ได้
if else repeat while function for in next break
TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_
คำสงวนเพิ่มเติม ศึกษาได้จาก
help(Reserved) ต้องการตั้งชื่อตัวแปรของคุณด้วยคำสงวนหรือขึ้นต้นด้วยเครื่องหมายขีดล่าง หรือมีการเว้นวรรค เราจะจะต้องใช้เครื่องหมาย \(^\backprime\)(backticks) ในการตั้งชื่อตัวแปร ในกรณี ที่ชื่อตัวแปรจำเป็นต้องเว้นวรรค หรือมีเครื่องหมายพิเศษ ที่ไม่สามารถใช้ต้องชื่อได้ เช่น - ? * + / เป็นต้น
_variable <- 10 Error: <text>:1:2: unexpected symbol
1: _variable
^
`_variable` <- 10
`_variable`[1] 10
TRUE <- 10 Error in TRUE <- 10: invalid (do_set) left-hand side to assignment
`TRUE` <- 10
`TRUE`[1] 10
somsak chanaim <- 2Error: <text>:1:8: unexpected symbol
1: somsak chanaim
^
`somsak chanaim` <- 2
`somsak chanaim`[1] 2
ในอาร์ตัวดำเนินการเบ็ดเตล็ดจะใช้สำหรับ วัตถุประสงค์เฉพาะ เช่น การเข้าถึงข้อมูลและฟังก์ชัน การสร้างลำดับ หรือการระบุสูตรของแบบจำลองทางสถิติ ในตารางจะแสดงตัวดำเนินการเบ็ดเตล็ดที่มีอยู่ในอาร์
| ตัวดำเนินการ | คำอธิบาย |
|---|---|
| $ | การเข้าถึงตัวแปรในกรอบข้อมูล (data frame) |
| : | การสร้างลำดับจำนวนเต็ม |
| :: | การเรียกใช้่คำสั่งจากชุดคำสั่งที่ต้องการ |
| \(\sim\) | ตัวแบบทางสถิติ |
| @ | การเข้าถึงตัวแปรประเภท S4 classes(ขึ้นสูง) |
| %in% | พิจารณาเลือกค่าที่สนใจ ที่อยู่ในภายนี้วัตถุหรือไม่ |
ตัวอย่างการใช้งานตัวดำเนินการ $
df <- data.frame(x = c(7, 9), y = c(5, 9))
df$x[1] 7 9
ตัวดำเนินการ :
1:5[1] 1 2 3 4 5
ตัวดำเนินการ ::
ggplot2::diamondsตัวดำเนินการ \(\sim\)
lm(y ~ x,data = df)
Call:
lm(formula = y ~ x, data = df)
Coefficients:
(Intercept) x
-9 2
ตัวดำเนินการ \%in\%
พิจารณาว่าค่า \("\)A\("\) อยู่ในตัวแปร LETTERS หรือไม่
"A" %in% LETTERS[1] TRUE
ตัวดำเนินการไปร์เป็นตัวดำเนินการใหม่ของอาร์รุ่น 4.1 ขึ้นไป เราสามารถอ่านโอเปอเรเตอร์นี้เป็น ‘AND THEN’ และจุดประสงค์ของมันคือเพื่อลดความซับซ้อนของไวยากรณ์เมื่อเขียนคำสั่งด้วยอาร์ ตัวอย่างเช่น จากข้อมูล cars เราสนใจจะหาสถิติพรรณาของข้อมูลที่ตัวแปร dist มีค่ามากกว่า 20
ถ้าไม่ใช้ตัวดำเนินการไปป์
summary(subset(x = cars, dist > 20)) speed dist
Min. : 7.00 Min. : 22.00
1st Qu.:13.75 1st Qu.: 32.00
Median :17.00 Median : 46.00
Mean :16.95 Mean : 50.45
3rd Qu.:20.00 3rd Qu.: 64.50
Max. :25.00 Max. :120.00
ถ้าใช้ตัวดำเนินการไปป์
cars |> subset(dist > 20) |> summary( ) speed dist
Min. : 7.00 Min. : 22.00
1st Qu.:13.75 1st Qu.: 32.00
Median :17.00 Median : 46.00
Mean :16.95 Mean : 50.45
3rd Qu.:20.00 3rd Qu.: 64.50
Max. :25.00 Max. :120.00
จะเห็นว่าการใช้ตัวดำเนินการไปร์ มีการเขียนคำสั่งที่อ่านได้ง่ายกว่า
ตัวดำเนินการนี้มีประโยชน์อย่างมากในกระบวนการความสะอาดข้อมูลที่มีหลายขั้นตอน จะพูดถึงอีกครั้งในบทที่ 5