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"
หรือ
1:5] letters[
[1] "a" "b" "c" "d" "e"
แต่ถ้าเป็นฟังก์ชัน จะไม่สามารถพิมพ์แต่ชื่อได้ จะต้องพิมพ์ชื่อและตามด้วยเครื่องหมายวงเล็บเปิด ( ) เสมอ โดยที่ฟังก์ชันนั้นจะใส่ค่าที่ต้องการภายวงเล็บหรือไม่ได้ก็ได้ ขึ้นอยู่กับตัวฟังก์ชันเอง โดยฟังก์ชันนั้นมีหน้าที่ในการประมวลผลตามที่ผู้เขียนต้องการ
ถ้าเรียกใช้ฟังก์ชันโดยไม่ใส่วงเล็บ ( ) จะได้ผลดังตัวอย่างต่อไปนี้
mean
function (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 ไม่ใช่คำสงวน ดังนั้น จึงสามารถกำหนดให้เป็นชื่อตัวแปรได้แต่ไม่ควรทำเป็นอย่างยิ่ง สำหรับผู้เริ่มใช้ภาษาอาร์ ขอแนะนำให้ กำหนดค่าตรรกศาสตร์ด้วยคำเต็มเสมอ
<- T
a is.logical(a)
[1] TRUE
<- 2
F 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 | ปัจจัย |
เปลี่ยนตัวเลขจำนวนเต็ม
<- 3
a <- as.integer(a)
a is.integer(a)
[1] TRUE
เปลี่ยนค่าตรรกศาตร์เป็นตัวเลข
<- as.numeric(TRUE)
bas.numeric(b)
[1] 1
เปลี่ยนตรรกศาตร์เป็นวัตถุอักษร
<- as.character(TRUE)
c 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 ตัวดังนี้
.1 <- 1:10
num.2 <- c(log(50),log(100)) num
คำสั่ง 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 เช่น
.1 <- NULL num
ถ้าต้องการบันทึกตัวแปรทุกตัวในพื้นที่การทำงาน สามารถใช้คำสั่ง save.image( )
save.image(file = "ชื่อไฟล์ที่ต้องการ.Rdata")
ตัวอย่าง สร้างวัตถุขึ้นมา 3 ตัวให้มีชื่อ x y และ z
<- 20
x <- 34
y <- "house" z
ทำการบันทึกในชื่อไฟล์ 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)
สำหรับกระบวนการเลขคณิตสำหรับตัวแปรเวคเตอร์จะได้ผลลัพธ์ดังนี้
<- c(1, 7, 3)
x <- c(9, 4, 5)
y + y x
[1] 10 11 8
- y x
[1] -8 3 -2
* y x
[1] 9 28 15
/ 2 x
[1] 0.5 3.5 1.5
** y x
[1] 1 2401 243
^ y x
[1] 1 2401 243
%% y x
[1] 1 3 3
%/% y x
[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
สำหรับตัวแปรเวคเตอร์ จะเป็นการเปรียบเทียบแต่ละค่าที่ลำดับหรือตำแหน่งเดียวกัน
<- c(12, 4 , 14)
x <- c(3, 4, 15)
y >= y x
[1] TRUE TRUE FALSE
<= y x
[1] FALSE TRUE TRUE
== y x
[1] FALSE TRUE FALSE
!= y x
[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( ) หรือเป็น ดำเนินการให้ค่ากับตัวแปรภายในชุดคำสั่ง
ตัวอย่าง
<- 3
x 3 -> y
<- function(x,y){
ADD <- x + y
result 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) ในการตั้งชื่อตัวแปร ในกรณี ที่ชื่อตัวแปรจำเป็นต้องเว้นวรรค หรือมีเครื่องหมายพิเศษ ที่ไม่สามารถใช้ต้องชื่อได้ เช่น - ? * + / เป็นต้น
<- 10 _variable
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
<- 2 somsak chanaim
Error: <text>:1:8: unexpected symbol
1: somsak chanaim
^
`somsak chanaim` <- 2
`somsak chanaim`
[1] 2
ในอาร์ตัวดำเนินการเบ็ดเตล็ดจะใช้สำหรับ วัตถุประสงค์เฉพาะ เช่น การเข้าถึงข้อมูลและฟังก์ชัน การสร้างลำดับ หรือการระบุสูตรของแบบจำลองทางสถิติ ในตารางจะแสดงตัวดำเนินการเบ็ดเตล็ดที่มีอยู่ในอาร์
ตัวดำเนินการ | คำอธิบาย |
---|---|
$ | การเข้าถึงตัวแปรในกรอบข้อมูล (data frame) |
: | การสร้างลำดับจำนวนเต็ม |
:: | การเรียกใช้่คำสั่งจากชุดคำสั่งที่ต้องการ |
\(\sim\) | ตัวแบบทางสถิติ |
@ | การเข้าถึงตัวแปรประเภท S4 classes(ขึ้นสูง) |
%in% | พิจารณาเลือกค่าที่สนใจ ที่อยู่ในภายนี้วัตถุหรือไม่ |
ตัวอย่างการใช้งานตัวดำเนินการ $
<- data.frame(x = c(7, 9), y = c(5, 9))
df $x df
[1] 7 9
ตัวดำเนินการ :
1:5
[1] 1 2 3 4 5
ตัวดำเนินการ ::
::diamonds ggplot2
ตัวดำเนินการ \(\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
ถ้าใช้ตัวดำเนินการไปป์
|> subset(dist > 20) |> summary( ) cars
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