View
4
Download
0
Category
Preview:
Citation preview
R สำหรบผเรมตน
Emmanuel Paradis1 (translation: ChantimaPiyapong2, edition: Julien Claude1)
1: Institut des Sciences de l’EvolutionUniversite Montpellier
F-34095 Montpellier cedex 05France
E-mail: emmanuel.paradis@ird.fr
2: Department of Biology, Faculty of ScienceBurapha University
Chonburi, 20131Thailand
E-mail: chantimap@buu.ac.th
กตตกรรมประกาศ
การแปลเอกสาร R สำหรบผเรมตนฉบบนสำเรจลลวงไดเนองจากไดรบการสนบสนนจากโครงการวจยเรอง Analysis of Biodiversity in R ภายใตความรวมมอดานอดมศกษาและการวจยระหวางไทย-ฝรงเศส ประจำป พ.ศ. 2558–2559 (PHC SIAM Franco-ThaiAnalysis of Biodiversity in R: 2015–2016) จงขอขอบพระคณอยางสงสำหรบความรวมมอ ฯ น รวมทงขอขอบพระคณ พนเอกรงศกด จตตแกว ผศ.ดร.วรางคณา กมปานและ ผศ.ดร.สำรวม บวประดษฐ ทไดใหคำแนะนำและขอคดเหนตางๆ อนเปนประโยชนอยางยงในการแปลเอกสารในครงน และขอขอบคณสมาชกทมผชวยในการแปลเอกสารนไดแก นางสาวปยะรกษ ประดบเพชรรตน นางสาวจราพชร แบนมาก นางสาวกรองทอง ตงสทธ และนายสนต สวนลา ทชวยในการตรวจแกไขทำใหเอกสารนสำเรจไดดวยด สดทายนหากมขอผดพลาดประการใดทางคณะผจดทำยนดแกไขและปรบปรงใหดยงขนในการจดทำฉบบปรบปรงถดไป
c⃝ 2002, 2005, Emmanuel Paradis (3 กรกฎาคม พ.ศ. 2561)
Permission is granted to make and distribute copies, either in part or in full andin any language, of this document on any support provided the above copyrightnotice is included in all copies. Permission is granted to translate this document,either in part or in full, in any language provided the above copyright notice isincluded.เอกสารนไดรบการอนญาตใหจดทำขนและเผยแพรภายใตลขสทธขางตน การผลตและลอกเลยนเอกสารนไมวารปแบบใดยอมกระทำไดแตตองไดรบอนญาตจากเจาของลขสทธเทานน
สารบญ
1 คำนำ 1
2 หลกการบางอยางกอนการเรมตน 32.1 R ทำงานอยางไร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 การสราง การทำรายการและการลบ ออบเจกตในหนวยความจำ . . . . . . 52.3 การชวยเหลอการใชงานออนไลน (on-line help) . . . . . . . . . . . . . 8
3 ขอมลดวย R 113.1 ออบเจกต . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 การอานขอมลในไฟล . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3 การบนทกขอมล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.4 การสรางขอมล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4.1 ลำดบปกต (regular sequences) . . . . . . . . . . . . . . . . . 183.4.2 ลำดบแบบสม (random sequences) . . . . . . . . . . . . . . . 21
3.5 การจดการออบเจกต (Manipulating objects) . . . . . . . . . . . . . . 223.5.1 การสรางออบเจกต . . . . . . . . . . . . . . . . . . . . . . . . 223.5.2 การปรบเปลยนออบเจกต (converting objects) . . . . . . . . . 293.5.3 ตวดำเนนการ (operators) . . . . . . . . . . . . . . . . . . . . 303.5.4 การเขาถงคาของออบเจกต: ระบบการทำดชน (indexing system) 323.5.5 การเขาถงคาตาง ๆ ของออบเจกตโดยชอ . . . . . . . . . . . . . 353.5.6 ตวปรบแกขอมล (data editor) . . . . . . . . . . . . . . . . . . 373.5.7 เลขคณตและฟงกชนอยางงาย (arithmetics and simple functions) 373.5.8 การคำนวณหรอการคณนาเมทรกซ (matrix computation) . . . . 40
4 กราฟกโดย R 434.1 การจดการกราฟก . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1.1 การเปด graphical devices หลายสวน (several graphical devices) 434.1.2 การแบงสวนของกราฟก (partitioning a graphic) . . . . . . . . 45
4.2 ฟงกชนกราฟก (graphical functions) . . . . . . . . . . . . . . . . . . 484.3 คำสงการวาดระดบตำ . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.4 พารามเตอรกราฟก (graphical parameters) . . . . . . . . . . . . . . . 514.5 ตวอยางภาคปฏบต . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.6 แพกเกจ grid และ lattice . . . . . . . . . . . . . . . . . . . . . . . . 58
5 การวเคราะหทางสถตดวย R 655.1 ตวอยางอยางงายของการวเคราะหความแปรปรวน . . . . . . . . . . . . . 655.2 สตร (formulae) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.3 ฟงกชนทวไป (generic functions) . . . . . . . . . . . . . . . . . . . . 695.4 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6 การเขยนโปรแกรมดวย R ในทางปฏบต 766.1 การวนรอบและและการใชเวกเตอร (loops and vectorization) . . . . . . 766.2 การเขยนโปรแกรใน R . . . . . . . . . . . . . . . . . . . . . . . . . . 786.3 การเขยนฟงกชนดวยตวเอง . . . . . . . . . . . . . . . . . . . . . . . . 80
7 เอกสารเกยวกบ R 84
1 คำนำ
วตถประสงคของการจดทำเอกสารนเพอเปนจดตงตนสำหรบผทเรมสนใจใน R ผเขยนเนนไปทการทำเขาใจวา R ทำงานอยางไร โดยกลมเปาหมายคอผใช R เบองตนมากกวาผทมความเชยวชาญใน R โดยขอดของ R ทใหกบผใชนนมอยมาก ดงนนการเขาใจแนวคดและหลกการจะเปนประโยชนตอผเรมใช R ในการทจะใช R ไดดขนโดยงาย ผเขยนพยายามใชคำอธบายทเขาใจงายใหมากทสดสำหรบทกคนขณะเดยวกนผเขยนไดใหรายละเอยดทเปนประโยชนและบางครงรวมถงตารางดวย
R เปนระบบหนงสำหรบการวเคราะหทางสถตและภาพกราฟกทคดคนโดย Ross Ihakaและ Robert Genteleman1 R เปนทงซอฟตแวรและภาษาคอมพวเตอรทไดรบการพฒนามาจากภาษา S ทถกคดคนโดยหองปฏบตการ AT&T Bell S สามารถนำมาใชไดในฐา-นะทเปนซอฟตแวรทางพาณชยของ S-PLUS โดย Insightful2 รปแบบของ R และ S มความแตกตางกนอยางมากสำหรบผทประสงคจะทราบขอมลความแตกตางนสามารถอานไดจากเอกสารโดย Ihaka & Gentleman (1996) หรอ R-FAQ3 ซงเปนเอกสารฉบบหนงทเผยแพรโดย R
R ถกออกแบบมาเพอใหใชงานฟรภายใตเงอนไขของ GNU General Public Licence4
ซงไดมการพฒนาและเผยแพรโดยนกสถตมากมายซงรจกกนในนาม R Development CoreTeam
R สามารถถกใชงานไดในหลายรปแบบเนองจากแหลงตนทาง (sources) ของ R สวนใหญถกเขยนจากภาษา C และ บางสวนในภาษา Fortran ซงเปนภาษาคอมพวเตอรทจำ-เปนสำหรบเครองทเปนระบบ Unix และ Linux หรอจากการคอมไฟลรหสเลขฐานสอง(pre-compiled binaries) สำหรบ Windows, Linux และ Macintosh เพอตดตง R จำเปนตองมไฟลเหลานไมวาจะมาจากจากแหลงตนทางหรอจากการคอมไพลรหสเลขฐานสอง ซงถกเผยแพรในแหลงขอมลอนเทอรเนตของ Comprehensive R Archive Network (CRAN)5
ทมคมอการตดตงใหดวย จากการสรางของ Linux (Debian,. . . ) เลขฐานสองเปนรปแบบภาษาคอมพวเตอรทถกใชงานโดยทวไป สำหรบเวอรชนทเปนปจจบนดไดท CRAN ถาจำ-เปน
1Ihaka R. & Gentleman R. 1996. R: a language for data analysis and graphics. Journal ofComputational and Graphical Statistics 5: 299–314.
2ด http://www.insightful.com/products/splus/default.asp for more information3http://cran.r-project.org/doc/FAQ/R-FAQ.html4สำหรบขอมลเพมเตม http://www.gnu.org/5http://cran.r-project.org/
1
R มฟงกชนมากมายสำหรบการวเคราะหทางสถตและภาพกราฟก โดยภาพกราฟกนถกเหนไดในทนทในวนโดว (window) ของมนเองและสามารถถกบนทกไดในหลายรปแบบ(format) ตวอยางเชน jpg, png, bmp, ps, pdf, emf, pictex, xfig ซงรปแบบทมอาจขนอยกบระบบปฏบตการ สวนผลจากการวเคราะหทางสถตถกแสดงผานหนาจอโดยผลการว-เคราะหทปรากฏในทนทบางคา เชน (P-values, regression coefficients, residuals,. . . )สามารถถกบนทก เขยนขนเปนไฟลหรอถกใชเพอการวเคราะหตอไป
ภาษา R ใหผใชสามารถโปรแกรมได ตวอยางเชน โปรแกรมเปนแบบทำซำหรอแบบเปนรอบ (loop) เพอวเคราะหชดของขอมลหลายชดไดอยางตอเนอง รวมทงยงสามารถรวมฟงกชนทางสถตทแตกตางกนหลายฟงกชนใหอยในโปรแกรมเดยวเพอแสดงการวเคราะหขนสงมากขนได ผใช R อาจไดประโยชนจากโปรแกรมเปนจำนวนมากทถกเขยนขนสำหรบS6 และสามารถหาไดจากในอนเทอรเนตซงโปรแกรมเหลานสวนใหญสามารถถกใชไดโดยตรงกบ R
ในระยะแรก R อาจดเหมอนซบซอนเกนไปในการใชงานสำหรบผทไมเชยวชาญในการใช R ซงแททจรงแลวไมเปนความจรง ตามจรงแลวคณลกษณะทโดดเดนของ R คอความยดหยนของ R ในขณะทซอฟตแวรดงเดมแสดงผลของการวเคราะหทนทแตวา R เกบผลการวเคราะหเหลานในรปของ “วตถหรอออบเจกต” (“object”) เพอทวาการวเคราะหสา-มารถทำใหเรยบรอยโดยทไมตองแสดงผลออกมา ผใชอาจจะประหลาดใจในกรณนแตดวยคณลกษณะนของ R ถอไดวาเปนประโยชนอยางมากเนองจากตามความเปนจรงแลวผใชR สามารถคดลอกเฉพาะสวนทเปนผลจากการวเคราะหทสนใจไดเลย ตวอยางเชน ถาผใช R คนหนงทำการวเคระหชดขอมลของสมการถดถอย (regression) 20 ชด และตอง-การเปรยบเทยบคาสมประสทธการถดถอย (regression coefficient) ทแตกตางกนแลว Rสามารถแสดงผลเพยงคาสมประสทธทถกประมาณเทานน โดยผลนอาจจะมหนงบรรทดในขณะทซอฟตแวรดงเดมอาจแสดงผลผาน 20 หนาของหนาตาง (Window) เราสามารถเหนตวอยางอนๆ อกทแสดงใหเหนถงความยดหยนของระบบเชนทมใน R เมอเปรยบเทยบกบซอฟตแวรดงเดม
6ตวอยางเชน http://stat.cmu.edu/S/
2
2 หลกการบางอยางกอนการเรมตน
ทนทท R ไดถกตดตงบนเครองคอมพวเตอรและเมอเปดโปรแกรม ซอฟตแวรถกดำเนนการ โดยจะปรากฏสญลกษณ “>” คอ prompt ทเปนคาเรมตนหรอคาโดยปรยาย (default)เพอบงบอกวา R กำลงรอคำสงอย ภายใตระบบปฏบตการวนโดว (Window) ใชคำสงRgui.exe (โดยบางคำสงซงถกเขาถงไดจากการใช on-line help การเปดไฟล หรอดวยวธอนๆ) สามารถถกดำเนนการไดผานทางการเลอกลกษณะทเกดจากการคลกในรายการเลอกแบบดงลง (pull-down menus) ทขนตอนนผไมเคยใช R มากอนอาจจะสงสยวา“ตอนนฉนทำอะไรอย” ดงนนการเขาใจถงแกนบางอยางวา R ทำงานอยางไรจะเปนประ-โยชนอยางมากเมอ R ถกใชเปนครงแรกและตอไปนเปนสงทเราจะทำความเขาใจเกยวกบ R
เรมแรกเราจะทำความเขาใจโดยยอวา R ทำงานอยางไร และจากนนผเขยนจะอธบายถงตวดำเนนการทถกกำหนดให (“assign” operator) ซงยอมใหสรางออบเจกต ตอมาเกยวกบการจดการออบเจกตในหนวยความจำ (memory) ทำอยางไร และสดทายการใช on-linehelp ทำไดอยางไรซงเปนประโยชนอยางมากเมอใชงานใน R
2.1 R ทำงานอยางไร
ความจรงทวา R เปนภาษาหนงของคอมพวเตอรอาจจะขดขวางผใช R บางคนทคดวา “ฉนไมสามารถเขยนโปรแกรมได” ขอนอาจไมเปนความจรงดวยเหตผลสองประการ ประการแรก R เปนภาษาโปรแกรมททำงานแบบทละคำสงหรอคำสงตอคำสง (interpreted language)ไมใชภาษาทแปลทเดยวตงแตตนจนจบ (compiled language) นนหมายความวาคำสง (command)ของ R ทงหมดทถกพมพบนคยบอรด จะถกดำเนนการโดยตรงซงไมตองสรางโปรแกรมทสมบรณตงแตตนจนจบแลวจงคอมไพลโปรแกรม อยางเชนในภาษาคอมพวเตอรสวนใหญเชน C, Fortran, Pascal เปนตน
ประการทสอง syntax ของ R มความเรยบงายและเปนธรรมชาตมาก ตวอยางเชน ในสมการถดถอยเชงเสน (linear regression) สามารถใชคำสง lm(y ˜ x) วเคราะห-ไดซงหมายถง “การกำหนดโมเดลเชงเสนโดยท y เปนตวแปรตามและ x เปนตวแปรพยา-กรณหรอตวแปรอสระ” ใน R เพอใหถกดำเนนการได ฟงกชนจำเปนตองถกเขยนภายในเครองหมายวงเลบ (parentheses) เสมอ หรอแมกระทงไมมฟงกชนเลยใน parenthesesเชน ls() ถาผใช R พมพเพยงแตชอของฟงกชนโดยไมม parentheses แลว R จะแสดงเนอหาของฟงกชนนนๆ แทน ในเอกสารนชอฟงกชนโดยทวไปถกเขยนอยกบ parenthesesเพอทจะไดใชแยกแยะฟงกชนเหลานออกจากออบเจกตอนๆ ยกเวนวามขอความระบชดเจนวาเปนอยางไร
3
ขณะท R กำลงทำงานอย ตวแปร ขอมล ฟงกชน ผลและอนๆ ถกเกบในหนวยความจำทกำลงใชงานอย (active memory) ของเครองคอมพวเตอรในรปแบบของ ออบเจกตซงมชอ name ผใช R สามารถดำเนนการกระทำกบออบเจกตเหลานดวยตวดำเนนการ(operator) เชน ทางเลขคณต(arithmetic) ทางตรรกะ (logical) ทางการเปรยบเทยบ(comparison) และอนๆ เปนตน และดวยฟงกชนตางๆ (functions) ซงเปนออบเจกตโดยตวมนเอง การใชตวดำเนนการเหลานคอนขางเปนธรรมชาตซงเราจะไดเหนในรายละเอยดถดไป (หนา 30) ฟงกชนใน R ฟงกชนหนงอาจมโครงสรางดงตอไปน
อารกวเมนต −→
ตวเลอก −→
ฟงกชน↑
อารกวเมนตโดยปรยาย=⇒ผล
อารกวเมนตสามารถเปนออบเจกตได เชน ขอมล (data) สตร (formulae) นพจน(expressions) เปนตน ออบเจกตบางออบเจกต นอาจถกนยามโดยปรยายในฟงกชนเนองจากคาปรยายอาจถกปรบเปลยนโดยผใชซงทำการกำหนดในรายละเอยดเอง ฟงกชนใน Rฟงกชนหนงอาจไมตองการอารกวเมนตกได เนองจากอารกวเมนตทงหมดถกนยามโดยปร-ยายหากไมกำหนดเปนคาอน และคาเหลานอาจถกเปลยนแปลงไดดวยตวเลอก (options)หรออาจเนองมาจากไมมอารกวเมนตทไดนยามไวในฟงกชน รายละเอยดเพมเตมเราสามารถดไดในสวนการใชและการสรางฟงกชนทำไดอยางไรในหนา 80) การอธบายในทนเพยงพอสำหรบการทำความเขาใจวา R ทำงานอยางไร
ปฏบตการทงหมดของ R ถกกระทำในรปแบบออบเจกต ซงถกเกบในหนวยความจำทกำลงใชงานอย (active memory) ของเครองคอมพวเตอรโดยไมมการใชไฟลชวคราวดงรปท 1 การอานและการเขยนของไฟล (file) ทถกใชสำหรบการรบ (input) และการแสดงผล(ouput) ของขอมลและผลลพธ (ภาพกราฟกหรออนๆ) ผใช R กระทำการตามฟงกชนผานทางคำสงบางคำสง ผลทไดถกแสดงผานหนาจอโดยตรงโดยถกเกบในรปของออบเจกตหรอถกเขยนลงบนแผนดสก(โดยเฉพาะในสวนภาพกราฟก) เนองจากผลลพธ (results) จะเปนออบเจกตโดยตวมนเอง ดงนนผลนสามารถถกทำใหเปนขอมลและนำไปวเคราะหได ไฟลขอมลสามารถถกอานจาก local disk ซงเปน hard disk ภายในเครองคอมพวเตอรทใช-งานหรอจาก การเขาถงเครองแมขายระยะไกล (remote server) จากอนเทอรเนต
ฟงกชนทผใช R ใชงานไดถกเกบในไลบราร (library) ทอยบนดสกในไดเรกทอร (directory)ซงเรยกวา R HOME/library (R HOME คอ directory ท R ถกตดตง) ไดเรกทอรนประกอบดวยแพกเกจ (packages) ของฟงกชนตางๆ ซงไดถกสรางขนเองในไดเรกทอรโดยแพกเกจหลกชอวา base และประกอบไปดวยฟงกชนพนฐานของภาษาคอมพวเตอร Rโดยเฉพาะในการอานและการจดการขอมล แตละแพกเกจมไดเรกทอรทมชอ R กบชอไฟลคลายกบแพกเกจ ตวอยางเชน แพกเกจชอวา base มไฟลคอ R HOME/library/base/R/base
4
ฟงกชนและตวดำเนนการ
?
ออบเจกตทเปนขอมล
?6
����)XXXXXXXz
ออบเจกตทเปนผล
.../library/base//stats/
/graphics/...
ไลบรารฟงกชน
�
ไฟลขอมล� -
อนเทอรเนต�
PS JPEG . . .
คยบอรดเมาส
-คำสง
หนาจอ
หนวยความจำทกำลงใชงานอย ฮารดดสก
รปท 1: ภาพแผนผงแสดงวา R ทำงานอยางไร
โดยไฟลนมฟงกชนทงหมดของแพกเกจน
หนงในชดคำสงทงายทสดคอการพมพชอของออบเจกตหนงเพอแสดงเนอหาของมน ตว-อยางเชน ถา ออบเจกตหนงคอ n มคาคอ 10 การแสดงผลจะเปนดงน
> n
[1] 10
อธบายไดวา ตวเลข 1 ในเครองหมายวงเลบเหลยม (bracket) เปนตวบงบอกถงจดเรม-ตนของการแสดงคาทเปนองคประกอบหรออลเมนท (element) แรกของ n ในคำสงนเปนการใชทบอกเปนนยวาหมายถงการใชฟงกชน print และในตวอยางขางตนมความคลาย-คลงกบ print(n) ซงในบางสถานการณฟงกชน print ตองถกใชอยางชดเจนอยางเชนภายในฟงกชนหนงหรอแบบวนรอบ (loop) หนง
สำหรบชอของออบเจกต ตวอกษรแรกตองเรมดวย ตวใดตวหนงของ A–Z หรอ a–zและสามารถประกอบดวยตวอกษร ตวเลข (0-9) จด (.) และเครองหมาย underscores( ) ได R แสดงความแตกตางระหวางตวอกษรตวพมพใหญและตวอกษรตวพมพเลกในชอของออบเจกตได ดงนน x และ X สามารถเปนชอของออบเจกตสองออบเจกตทแตกตางกน(แมแตการทำงานภายใตระบบปฏบตการวนโดว)
2.2 การสราง การทำรายการและการลบ ออบเจกตในหนวยความจำ
ออบเจกตหนงสามารถถกสรางดวยตวดำเนนการทกำหนดให (“assign"" operator) ซงถกเขยนดวยสญลกษณลกศรกบเครองหมายลบ และเครองหมายวงเลบเหลยมซงสญลกษณนสามารถเรมจากซายไปขวาหรอกลบกนได ดงตวอยาง
5
> n <- 15
> n
[1] 15
> 5 -> n
> n
[1] 5
> x <- 1
> X <- 10
> x
[1] 1
> X
[1] 10
ถาออบเจกตนนมอยแลวคาของออบเจกตกอนหนานจะถกลบไปซงการเปลยนแปลงมผลเฉพาะ ออบเจกตในหนวยความจำทกำลงใชงานอยไมมผลตอขอมลบนดสก คาทถกกำ-หนดไวดวยวธนจะเปนผลลพธของการดำเนนการและ/หรอฟงกชนหนงดงตวอยาง
> n <- 10 + 2
> n
[1] 12
> n <- 3 + rnorm(1)
> n
[1] 2.208807
จากตวอยางขางตน ฟงกชน rnorm(1) ซงสรางตวแปรสมปกต (normal randomvariate) กบ mean zero และ variance unity (หนา 21) ขอสงเกตคอผใช R สามารถเพยงแตพมพนพจน (expression) หนงโดยไมมการกำหนดคาของนพจนไปยงออบเจกตไดซงผลลพธจะถกแสดงยงหนาจอแตไมถกเกบไวในหนวยความจำ ดงตวอยาง
> (10 + 2) * 5
[1] 60
จากตวอยางขางตน การกำหนดคาให (assignment) จะถกละไวถาไมมความจำเปนเพอการทำความเขาใจ
ฟงกชน ls เปนฟงกชนททำบญชรายชออยางงายของ ออบเจกต ในหนวยความจำโดยรายชอของออบเจกตเทานนทถกแสดง ดงตวอยาง
> name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5
> ls()
[1] "m" "n1" "n2" "name"
6
ขอสงเกตสำหรบการใชเครองหมาย semi-colon เพอแยกชดคำสงทตางกนในบรรทดเดยวกน หากตองการทำรายชอของออบเจกต ซงประกอบไปดวยอกขระหรออกษรทใหมา(given character) เทานนในชอของออบเจกต ดวยตวเลอกนสามารถใช ฟงกชน pattern
ซงสามารถเขยนยอวา pat ได ดงตวอยาง
> ls(pat = "m")
[1] "m" "name"
สำหรบกรณทตองการจำกดรายชอของออบเจกตทมชอขนตนดวยตวอกขระน สามารถทำไดดงตอไปน
> ls(pat = "^m")
[1] "m"
สวนฟงกชน ls.str เปนฟงกชนทแสดงรายละเอยดบางอยางของออบเจกตในหนวยความจำ ดงตวอยาง
> ls.str()
m : num 0.5
n1 : num 10
n2 : num 100
name : chr "Carmen"
ตวเลอกสำหรบฟงกชน pattern สามารถถกใชในลกษณะเดยวกนกบฟงกชน ls
ตวเลอกหนงทเปนประโยชนของฟงกชน ls.str คอ max.level ซงเจาะจงไปทระดบของรายละเอยดสำหรบการแสดง composite ออบเจกต สำหรบคาโดยปรยายหากไมกำ-หนดไวเปนอยางอน ฟงกชน ls.str แสดงรายละเอยดออบเจกตทงหมดในหนวยความจำ รวมทงคอลมน (column) ของ data frame, matrices และ lists ซงอาจจะแสดงผลทยาวมาก เราสามารถเลยงการแสดงรายละเอยดผลเหลานทงหมดโดยใชฟงกชนตวเลอกคอmax.level = -1 ดงตอไปน
> M <- data.frame(n1, n2, m)
> ls.str(pat = "M")
M : ‘data.frame’: 1 obs. of 3 variables:
$ n1: num 10
$ n2: num 100
$ m : num 0.5
> ls.str(pat="M", max.level=-1)
M : ‘data.frame’: 1 obs. of 3 variables:
7
เพอจะลบออบเจกตออกไปจากหนวยความจำนนเราสามารถใช ฟงกชน rm: rm(x)
ลบ ออบเจกต x ในขณะท rm(x,y) ลบทง ออบเจกต x และ ออบเจกต y สวนrm(list=ls()) ลบ ออบเจกตทงหมดในหนวยความจำ และสำหรบฟงกชน ls() ทสามารถถกใชเพอลบออบเจกตบางออบเจกตทตองการเลอกลบคอการใชคำสง rm(list=ls(pat="ˆm"))
2.3 การชวยเหลอการใชงานออนไลน (on-line help)
On-line help ของ R ใหขอมลทเปนประโยชนอยางมากวาฟงกชนใชงานไดอยางไร โดยการชวยเหลอนใชไดโดยตรงผานทางฟงกชนทใหไว ยกตวอยางดงตอไปน
> ?lm
ซงฟงกชนนจะแสดงภายใน R ในหนาชวยเหลอ (help page) ของฟงกชน lm()
(linear model) สำหรบคำสง help(lm) และ help("lm") ใหผลแบบเดยวกนกบ ?lm และคำสงสดทายทมความจำเปนในการเขาถงการชวยเหลอโดยใชอกขระแบบพ-เศษ (non-conventional characters) ดงตอไปน
> ?*
Error: syntax error
> help("*")
Arithmetic package:base R Documentation
Arithmetic Operators
...
การเรยกขอความชวยเหลอจะเปดหนาแสดงผลอกหนา (ทงนขนอยกบระบบปฏบตการ)ดวยขอมลทวไปในบรรทดแรกเชน ชอของแพกเกจซงเปนฟงกชนหรอตวดำเนนการทเขยนบนทกไว และตอจากหวขอตามดวยสวนทเปนขอมลทใหรายละเอยดเกยวกบหวขอนน ดงตอไปน
Description: เปนการบรรยายโดยยอ
Usage: การใชงานของฟงกชนตามชอทใหไวกบอากวเมนตของมนทงหมดและตวเลอกทเปนไปได (รวมกบคาโดยปรยายหากไมไดกำหนดเปนคาอนทตรงกน) สำหรบตวดำ-เนนการนนใหการใชแบบมาตรฐาน
Arguments: อากวเมนตสำหรบฟงกชนหนงทมรายละเอยดของแตละอากวเมนต
Details: การบรรยายลงในรายละเอยด
Value: ถาม เปนชนดของออบเจกตทถกรเทรนคากลบโดยฟงกชนหรอตวดำเนนการ
8
See Also: หนาชวยเหลออนๆ ทใกลเคยงหรอคลายกบหนาทกำลงดอย
Examples: ตวอยางบางอยางซงสามารถถกดำเนนการไดทวไปโดยไมตองเปดหนาชวยเหลอโดยการใชฟงกชน example
สำหรบผเรมตนแลวเปนเรองทดในการเขาไปดทสวนของ Examples โดยทวไปแลวมนมประโยชนทจะอานอยางละเอยดในสวนของ Arguments ในสวนอนๆ ทผอานพบและนาจะอานเชนกน ไดแก Note, References หรอ Author(s)
โดยปรยาย (by default) หากไมกำหนดเปนคาอนแลว ฟงกชน help คนหาเฉพาะแพกเกจทถกใสเขามาไวในหนวยความจำ ตวเลอกคอ try.all.packages ซงคาโดยปรยายคอ FALSE ทยอมใหทำการคนหา แพกเกจทงหมด ถาคาของของฟงกชนเปน TRUE
ดงตวอยางตอไปน
> help("bs")
No documentation for ’bs’ in specified packages and libraries:
you could try ’help.search("bs")’
> help("bs", try.all.packages = TRUE)
Help for topic ’bs’ is not in any loaded package but
can be found in the following packages:
Package Library
splines /usr/lib/R/library
ขอสงเกตในกรณนคอหนาชวยเหลอ (help page) ของฟงกชน bs ไมถกแสดง ผใชสามารถแสดงหนาชวยเหลอจากแพกเกจหนงทยงไมไดถกใสเขาในหนวยความจำโดยการใชpackage ตวเลอกดงตอไปน
> help("bs", package = "splines")
bs package:splines R Documentation
B-Spline Basis for Polynomial Splines
Description:
Generate the B-spline basis matrix for a polynomial spline.
...
การชวยเหลอ (help) ทอยในรปแบบ html (html format) ใหอานจาก Netscape (ตว-อยาง) ซงถกเรยกดไดโดยการพมพฟงกชนตอไปน
> help.start()
9
การคนหาผานคำสำคญ (keywords) สามารถทำไดโดยการใช html help ดงกลาวขางตน ในสวนของ See Also นม hypertext links เชอมไปยงหนาชวยเหลอของฟงกชนอนการคนหานดวยคำสำคญสามารถทำไดเชนกนใน R โดยใชฟงกชน help.search โดยหลงจากนนคนหาหวขอทเฉพาะเจาะจงใหเปนขอความอกขระ (character string) ในหนาชวยเหลอของ packages ทงหมดทไดตดตงไวในเครองคอมพวเตอร ตวอยางเชน ฟงก-ชน help.search("tree") จะแสดงรายการของฟงกชนซงในหนาชวยเหลอกลาวถง “tree” ขอสงเกตคอถา แพกเกจบางแพกเกจเพงไดถกลงตดตงใหม จะเปนประโยชนถาทำการ refresh ฐานขอมลใหมทถกใชโดย help.search ผานฟงกชนตวเลอกคอrebuild ตวอยางเชน help.search("tree", rebuild=TRUE)
ฟงกชน apropos ใชคนหาฟงกชนทงหมดซงชอประกอบดวยขอความอกขระทถกกำหนดใหเปนอารกวเมนตและ แพกเกจทไดถกนำเขาแลวในหนวยความจำเทานนทจะถกคนหาตามตวอยางดงตอไปน
> apropos(help)
[1] "help" ".helpForCall" "help.search"
[4] "help.start"
10
3 ขอมลดวย R
3.1 ออบเจกต
เราไดทราบแลววา R ทำงานดวยออบเจกต ซงนอกจากวาถกกำหนดลกษณะโดยชอและเนอหาของมนแลวยงถกกำหนดโดย ลกษณะเฉพาะ (attributes) ซงระบชนดของขอมลซงถกทำใหเปนตวแทนของออบเจกตหนง เพอใหเขาใจประโยชนของลกษณะเฉพาะเหลานใหพจารณาตวแปรหนงทมคาเปน 1, 2 หรอ 3 ตวแปรทมคานอาจจะเปนตวแปรจำนวนเตมตวอยางเชน จำนวนไขทอยในรง หรอการทำรหสของ categorical variable ตวอยางเชนเพศในประชากรบางประชากรของสตวกลม crustaceans ชนดหนง ซงประกอบดวย เพศผเพศเมยหรอกะเทย
เปนทชดเจนวาการวเคราะหสถตของตวแปรขางตนจะไมเหมอนกนในทงสองกรณ อธ-บายไดวาใน R ลกษณะเฉพาะของออบเจกตใหขอมลทจำเปนหรออธบายไดมากกวานวาในทางเทคนคหรอโดยทวไปแลวการกระทำของฟงกชนตอออบเจกตหนงขนอยกบลกษณะเฉพาะของทตามมาในภายหลง
ทกๆ ออบเจกตมสองลกษณะเฉพาะภายในทสำคญ (intrinsic attributes) คอ โหมด(mode) และ ความยาว (length) โหมดคอชนดพนฐานขององคประกอบหรออลเมนท (elements)ของออบเจกต ซงมอยสโหมดหลกๆ คอ ตวเลข (numeric) ตวอกษรหรออกขระ (character)คอมเพลกซ (complex)7 และ ทางตรรกะ (logical (FALSE หรอ TRUE)) สวนโหมดอนๆกมแตโหมดเหลานไมไดเปนตวแทนขอมล ตวอยางเชน ฟงกชนหรอนพจน สำหรบความยาวคอ จำนวนของ elements ของออบเจกต เพอทจะแสดงโหมดและความยาวของออบเจกตหนง ตอไปนเปนออบเจกตทใชฟงกชน mode และ length ตามลำดบ
> x <- 1
> mode(x)
[1] "numeric"
> length(x)
[1] 1
> A <- "Gomphotherium"; compar <- TRUE; z <- 1i
> mode(A); mode(compar); mode(z)
[1] "character"
[1] "logical"
7โหมดคอมเพลกซจะไมถกกลาวถงในเอกสารน
11
[1] "complex"
อะไรกตามทเปนโหมด ขอมลทหายไป (missing data) ถกแทนดวย NA (not available)สวนคาตวเลขทมจำนวนทใหญมากจะถกกำหนดดวยสญกรณยกกำลงหรอเลขชกำลง (exponentialnotation) ดงตอไปน
> N <- 2.1e23
> N
[1] 2.1e+23
R แสดงคาตวเลขทไมจำกด (non-finite numeric values) ใหเหมาะสม เชน ±∞ ดวยInf และ -Inf หรอคาทไมเปนจำนวนดวย NaN (not a number) ดงตอไปน
> x <- 5/0
> x
[1] Inf
> exp(x)
[1] Inf
> exp(-x)
[1] 0
> x - x
[1] NaN
คาหนงของโหมดอกขระคอ input กบ double quotes (") โดยทเปนไปไดทรวมอกขระทตามมาภายหลงในคานนถาคานนตามหลงเครองหมาย backslash (\) เมอสอง characterน (\")อยดวยกนจะถกทำใหเปนวธเฉพาะโดยฟงกชนบางฟงกชน เชน ฟงกชน cat สำ-หรบแสดงบนหนาจอ หรอฟงกชน write.table ทเขยนบนดสก (หนา 17 มฟงกชนqmethod เปนตวเลอกของฟงกชนน)
> x <- "Double quotes \" delimitate R’s strings."
> x
[1] "Double quotes \" delimitate R’s strings."
> cat(x)
Double quotes " delimitate R’s strings.
อกทางเลอกหนง ตวแปรของโหมดอกขระสามารถถกทำใหเปน delimited ดวย singlequotes (’) ในกรณนเครองหมาย double quotes ไมตองตามหลงเครองหมาย backslashesแตตองมเครองหมาย single quotes ดงตวอยางตอไปน
> x <- ’Double quotes " delimitate R\’s strings.’
> x
[1] "Double quotes \" delimitate R’s strings."
12
ตารางตอไปนแสดงภาพรวมชนดของออบเจกตทแสดงขอมล
ออบเจกต โหมด ออบเจกตเดยวกนเปนไดหลายโหมดหรอไม
vector numeric, character, complex หรอ logical ไมใชfactor numeric หรอ character ไมใชarray numeric, character, complex หรอ logical ไมใชmatrix numeric, character, complex หรอ logical ไมใชdata frame numeric, character, complex หรอ logical ใชts numeric, character, complex หรอ logical ไมใชlist numeric, character, complex, logical, ใช
function, expression, . . .
เวกเตอร (vector) ถอวาเปนตวแปรชนดหนงในความหมายทเปนทยอมรบโดยทวไปสวน factor เปน categorical variable ชนดหนง สำหรบอารเรย (array) หมายถงตารางทม k dimensions และ เมทรกซ(matrix) กคอกรณเฉพาะของอารเรยท k = 2 ขอสงเกตคอelements ของอารเรยหนงหรอของเมทรกซหนง คอโหมดเดยวกนทงหมด กรณกรอบขอ-มล (data frame) คอตารางหนงทประกอบดวย หนงเวกเตอรหรอหลายเวกเตอร และ/หรอfactors ทงหมดทมความยาวเทากน แตอาจจะเปนของโหมดทแตกตางกน ‘ts’ เปนชดขอ-มลทเปน time series ดงนนจงประกอบดวยลกษณะเฉพาะ (attributes) เพมเตมเชน ความถและวนตางๆ สดทาย list สามารถประกอบดวยชนดใดกไดของออบเจกตรวมถง lists ดวย
สำหรบเวกเตอรหนง โหมดและความยาวของมนเพยงพอทจะอธบายขอมลนนๆ สำ-หรบ ออบเจกตและสารสนเทศ (information) อนๆ มความจำเปนและถกกำหนดโดยลก-ษณะเฉพาะภายในทไมสำคญ (non-intrinsic attributes) โดยระหวางลกษณะเฉพาะเหลาน เราสามารถอางถงฟงกชน dim ซงตรงกบมต (dimensions) ของออบเจกตหนง ตวอยางเชน เมทรกซหนงทประกอบดวยสองบรรทดและสองคอลมนมฟงกชน dim เปนหนงคของคา [2,2] แตความยาวของมนคอ 4
3.2 การอานขอมลในไฟล
สำหรบการอานและการเขยนในไฟล R ใช working directory เพอทจะหา working directoryน คำสง getwd() (get working directory) จะถกใช และ working directory จะถกเปลยนไปโดย setwd("C:/data") หรอ (setwd("/home/–paradis/R") มนมความจำเปนทตองใหเสนทาง (path) ไปยงไฟลถาไฟลนนไมไดอยใน working directory8
8Under Windows, it is useful to create a short-cut of Rgui.exe then edit its properties and changethe directory in the field “Start in:” under the tab “Short-cut”: this directory will then be the working
13
R สามารถอานขอมลทถกเกบใน text (ASCII) files ดวยฟงกชนดงน read.table(ซงมหลาย variants ดตามขางลาง) scan และ read.fwf R สามารถอานไฟลในรป-แบบอนไดดวย ตวอยางเชน Excel, SAS, SPSS เปนตน และ R สามารถเขาถงฐานขอมลประเภท SQL แตฟงกชนทจำเปนนไมอยใน แพกเกจ base ฟงกชนเหลานเปนประโยชนมากสำหรบการใช R ในขนสงมากขน อยางไรกตามเราจะจำกดการใชเหลานโดยการอานไฟลในรปแบบ ASCII
ฟงกชน read.table มผลสำหรบการสราง data frame และนเปนวธสำคญทจะอานขอมลในรปแบบตาราง (tabular form) ตอไปนเปนตวอยางทสมมตวาไฟลหนงมชอวาname.dat และมคำสงดงน
> mydata <- read.table("data.dat")
จากขางบน R จะสราง data frame มชอวา mydata และแตละตวแปร (variable)จะถกใหชอโดยปรยาย (by default) เชน V1, V2, . . . และสามารถทำใหเขาถงแต-ละตวแปรโดยคำสง mydata$V1, mydata$V2,. . . หรอเชน mydata["V1"],mydata["V2"], . . . หรอโดยคำสง mydata[,1], mydata[,2],. . . 9 มหลายตวเลอกทเปนคาปรยาย ตวอยางเชน คาเหลานถกใชโดย R ถาคาเหลานถกละไวโดยผใชตามรายละเอยดในตารางตอไปน
read.table(file, header = FALSE, sep = "", quote = "\"’", dec = ".",
row.names, col.names, as.is = FALSE, na.strings = "NA",
colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#")
directory if R is started from this short-cut.9มขอแตกตางดงตอไปน mydata$V1 และ mydata[, 1] เปนเวกเตอร ขณะท mydata["V1"]
เปนกรอบขอมล (data frame) โดยสามารถเหนรายละเอยดมากกวานในการจดการออบเจกตในหนา 22
14
file ชอของไฟล (ภายในเครองหมาย "" หรอตวแปรหนงของโหมดอกขระ) อาจจะมทางทไปถงไฟลนนดวย (สญลกษณ \ ไมสามารถใชไดตองถกแทนทดวยสญ-ลกษณ / แมภายใตระบบปฏบตการวนโดว) หรอการเขาถงไฟลจากทางไกลประ-เภท URL (http://....)
header การบงบอกทางตรรกะ (FALSE หรอ TRUE) ถาไฟลนนประกอบดวยชอของตว-แปรในบรรทดแรกของตวไฟลนน
sep ตวแยกเขตขอมลทถกใชในไฟลนน ตวอยางเชน sep="\t" ถาไฟลนนเปนตา-ราง
quote อกขระทใชในการอางถงตวแปรของโหมดอกขระdec อกขระทใชสำหรบจดทศนยมrow.names เวกเตอรหนงซงมชอของบรรทดซงอาจเปนเวกเตอรของโหมดอกขระหรออาจ
เปนตวเลข (หรอชอ) ของตวแปรหนงของไฟล (โดยปรยาย: 1, 2, 3, . . . )col.names เวกเตอรหนงซงมชอของตวแปร (โดยปรยาย: V1, V2, V3, . . . )as.is ควบคมการเปลยนของตวแปรอกขระตามปจจย (ถา FALSE) หรอยงคงตวแปร
เปนอกขระ (TRUE) ซง as.is สามารถเปนไดทงเวกเตอรตรรกะ ตวเลขหรออกขระซงระบใหตวแปรถกเกบเปนอกขระ
na.strings คาทกำหนดใหเปนขอมลทหายไป (ถกเปลยนเปน NA)colClasses เวกเตอรของโหมดอกขระทกำหนดใหคลาสเปนลกษณะเฉพาะไปทคอลมนnrows จำนวนสงสดของบรรทดทอานคาได (คาลบถกละทง)skip จำนวนของบรรทดทถกขามไปกอนการอานขอมลcheck.names ถาเปนจรง ตรวจสอบวาตวแปรเปนชอทใชไดสำหรบ Rfill ถาเปนจรงและทกบรรทดไมมจำนวนเดยวกนของตวแปร “blanks” ถกเพมstrip.white ถาเปนจรง (เงอนไขตอ sep) ใหลบชองวางเพมเตมกอนและหลงตวแปรอกขระblank.lines.skip ถาเปนจรงละทงบรรทดวาง (“blank”)comment.char อกขระหนงทนยามคำอธบายในไฟลขอมล ทเหลอของบรรทดภายหลงอกขระน
ถกละทง (ทำใหอารกวเมนตนไมสามารถใชได ใช comment.char = "")
ฟงกชนทแตกตางกนของ read.table เปนประโยชนเนองจากฟงกชนเหลานมคาปรยายทแตกตางกนดงตอไปน
read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".",
fill = TRUE, ...)
read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",
fill = TRUE, ...)
read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".",
fill = TRUE, ...)
read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",",
fill = TRUE, ...)
ฟงกชน scan เปนฟงกชนทมความยดหยนมากกวาฟงกชน read.table ความแตกตางอยางหนงคอฟงกชน scan สามารถระบโหมดของตวแปรดงตวอยาง
> mydata <- scan("data.dat", what = list("", 0, 0))
15
จากคำสงขางบนเปนการอานในไฟล data.dat ม 3 ตวแปร ตวแปรแรกคอโหมดอกขระและตวแปรสองตวทอยถดมาคอโหมดตวเลข ลกษณะพเศษทสำคญอกอยางหนงของฟงก-ชน scan() คอสามารถถกใชเพอสรางออบเจกตเวกเตอร เมทรกซ data frames, listและอนๆ ทแตกตางกนได ในตวอยางขางบน mydata เปน list หนงของ 3 เวกเตอรโดยคาปรยายนเปนสงทละไว ฟงกชน scan() สรางเวกเตอรตวเลข ถาการอานขอมลไมสอดคลองกบรปแบบทคาดหมาย (ไมเปนคาปรยายหรอไมเปนคาทถกระบไวอยางใดอยางหนง) ขอความผดพลาด (error message) ถกตอบกลบมา ตอไปนเปนตวเลอก
file ชอของไฟล (ภายในเครองหมาย "")อาจจะมทางทไปถงไฟลนนดวย (สญ-ลกษณ \ ไมสามารถใชไดตองถกแทนทดวยสญลกษณ / แมภายใตระบบปฏ-บตการวนโดว) หรอการเขาถงไฟลจากทางไกลประเภท URL (http://....) ถาfile=""แลวขอมลถกนำเขาผานทางคยบอรด (การนำเขาสนสดลงโดยบรรทดวาง)
what ระบโหมดของขอมล (คาปรยายคอโหมดตวเลข)nmax จำนวนของขอมลทอานหรอถา what เปนรายการ (list) หนง จำนวนของบรรทด
ทอาน (โดยคาปรยาย scan อานขอมลถงจดสนสดของไฟล)n จำนวนของขอมลทอาน (ไมมขอจำกดสำหรบคาปรยาย)sep ตวแยกเขตขอมลทถกใชในไฟลquote อกขระทถกใชในการอางองตวแปรของโหมดอกขระdec อกขระทถกใชเปนจดทศนยมskip จำนวนของบรรทดทถกขามไปกอนการอานขอมลnlines จำนวนของบรรทดทอานna.string คาทกำหนดใหเปนขอมลทหายไป (ถกเปลยนเปน NA)flush โหมดอกขระหนง ถาเปนจรง ดบรรทดถดไปทนทเมอถงจำนวนคอลมนทไดรบ
(ยอมใหผใช R เพมคำอธบายในไฟลขอมล)fill ถาเปนจรงและทกบรรทดไมมจำนวนเดยวกนของตวแปร “blanks” ถกเพมstrip.white ถาเปนจรง (เงอนไขตอ sep) ใหลบชองวางเพมเตมกอนและหลงตวแปรอกขระquiet โหมดตรรรกะ ถาเปนเทจ พจารณาบรรทดทแสดงสวนทถกอานblank.lines.skip ถาเปนจรงละทงบรรทดวาง (“blanks”)multi.line ถา what คอรายการหนง ใหระบ ถาตวแปรของตวเดยวกนอยบนบรรทดเดยว
ในไฟล (เปนเทจ)comment.char อกขระหนงทนยามคำอธบายในไฟลขอมล ทเหลอของบรรทดภายหลงอกขระน
ถกละทง (คาปรยายคอปดการใชงาน)allowEscapes ระบวาการหลกเลยง C-style escapes (ตวอยางเชน ‘\t’) ถกดำเนนการหรอไม
(คาปรยาย) หรอถกอานตามทกตวอกษร
ฟงกชน read.fwf สามารถถกใชเพออานไฟลหนงได โดยขอมลบางอยางอยในรปfixed width format ดงตวอยาง
read.fwf(file, widths, header = FALSE, sep = "\t",
as.is = FALSE, skip = 0, row.names, col.names,
16
n = -1, buffersize = 2000, ...)
ตวเลอกของฟงกชนนเหมอนกบฟงกชน read.table()
ยกเวนความกวาง (widths) ซงระบใหความกวางของ fields(buffersize เปนจำนวนบรรทดสงสดทอานพรอมกน) ตว-อยางเชน ถาไฟลหนงทใหชอวา data.text มขอมลตามทบอกทางดานขวามอ ขอมลนสามารถถกอานไดดวยคำสงดงตอไปน
A1.501.2
A1.551.3
B1.601.4
B1.651.5
C1.701.6
C1.751.7
> mydata <- read.fwf("data.txt", widths=c(1, 4, 3))
> mydata
V1 V2 V3
1 A 1.50 1.2
2 A 1.55 1.3
3 B 1.60 1.4
4 B 1.65 1.5
5 C 1.70 1.6
6 C 1.75 1.7
3.3 การบนทกขอมล
ฟงกชน write.table เขยนไฟลหนงเปนออบเจกต ซงโดยทวไปเปนแบบกรอบขอ-มล (data frame) อยางไรกตามฟงกชนนอาจเขยนเปน ออบเจกตชนดอนได เชน vector,matrix เปนตน โดยทอารกวเมนตและตวเลอกคอ
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
eol = "\n", na = "NA", dec = ".", row.names = TRUE,
col.names = TRUE, qmethod = c("escape", "double"))
17
x ชอของออบเจกตทถกเขยนขนfile ชอของไฟล (โดยคาปรยาย ออบเจกตถกแสดงบนหนาจอ)append ถาเปนจรงเพมขอมลโดยปราศจากการลบขอมลเหลานทอาจจะคงอยในไฟลquote เวกเตอรเชงตรรกะหรอเชงตวเลข ถาเปนจรงตวแปรของโหมดอกขระและปจจยถกเขยน
ภายในเครองหมาย "" มฉะนนเวกเตอรเชงตวเลขบงบอกถงจำนวนของตวแปรทเขยนภายใน เครองหมาย "" (ในทงสองกรณชอของตวแปรถกเขยนภายในเครองหมาย ""
ถาไมไดเขยนเปน quote = FALSE)sep ตวแยกเขตขอมลทถกใชในไฟลeol อกขระทถกใชเมอสนสดในแตละบรรทด ("\n" คอ ตวนำการนำยอนกลบ)na อกขระทถกใชสำหรบขอมลทหายไปdec อกขระทถกใชสำหรบจดทศนยมrow.names โหมดตรรกะทบงบอกวาชอของบรรทดถกเขยนในไฟลหรอไมcol.names id. สำหรบชอของคอลมนqmethod การกำหนดเฉพาะ ถา quote=TRUE เครองหมาย double quotes " ซงรวมตวแปรของ
โหมดอกขระถกกระทำอยางไร ถา "escape" (หรอ "e", เปนคาปรยาย) แตละ " ถกแทนทโดย \" ถา แตละ "d" ถกแทนทโดย ""
เพอเขยนออบเจกตสำหรบไฟลหนงในวธทงายขน คำสง write(x,file="data.txt")
สามารถถกใชไดโดยท x คอชอของออบเจกต ซงอาจจะเปน vector, matrix หรอ arrayหนง) ทมสองตวเลอกใหใชคอ nc (หรอ ncol) ซงกำหนดจำนวนของคอลมนในไฟลนน(คาโดยปรยายคอ nc = 1 ถา x เปนของโหมดอกขระ, nc = 5 สำหรบโหมดอนๆ) และใช append (a logical) เพอเพมขอมลโดยปราศจากการลบขอมลทอาจมอยแลวในไฟลนน (TRUE) หรอการลบขอมลถาไฟลนนมอยกอนแลว (FALSE, ซงเปนคาโดยปรยาย)
เพอบนทกกลมของออบเจกตของชนดใดกตาม เราสามารถใชคำสง save(x,y,z,file="xyz.RData")
เพอลบการโอนยายของขอมลระหวางเครองคอมพวเตอรทตางกนไดสะดวกขน ตวเลอกท-ใชไดคอ ascii = TRUE (ขอมลนซงตอนนถกเรยกวา workspace ใน R’s jargon)สามารถถกสงเขาหนวยความจำไดภายหลงดวยฟงกชน load("xyz.RData") สวนฟงกชน save.image() เปน shortcut เพอบนทก (list=ls(all=TRUE),
file=".RData")
3.4 การสรางขอมล
3.4.1 ลำดบปกต (regular sequences)
ลำดบปกตของจำนวนเตม (integers) ตวอยางเชน จาก 1 ถง 30 สามารถถกสรางไดดงน
> x <- 1:30
จากผลดงกลาวขางตนไดวา x ม 30 องคประกอบหรอ elements สวน operator ‘:’มลำดบความสำคญเปนพเศษในการเปนตวดำเนนการเลขคณต (arithmetic operators)กอน ภายในนพจนดงตอไปน
18
> 1:10-1
[1] 0 1 2 3 4 5 6 7 8 9
> 1:(10-1)
[1] 1 2 3 4 5 6 7 8 9
ฟงกชน seq สามารถสรางลำดบของจำนวนจรงไดดงตอไปน
> seq(1, 5, 0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
จากฟงกชนขางบน ตวเลขแรกบงบอกถงลำดบเรมตนสวนตวเลขทสองหมายถงตวเลขสนสดของลำดบและตวเลขทสามหมายถงจำนวนตวเลขทเพมขนทถกใชในการสรางลำดบนอกจากนนยงสามารถใชฟงกชนดงตอไปนได
> seq(length=9, from=1, to=5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
นอกจากนสามารถพมพคาทใชโดยตรงโดยการใชฟงกชน c ดงน
> c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
เปนไปไดเชนกนถาผใชตองการใสขอมลบางอยางบนคยบอรดโดยใชฟงกชน scan โดยเพยงแคใชตวเลอกคาปรยาย ดงตวอยางตอไปน
> z <- scan()
1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
10:
Read 9 items
> z
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
ตวอยางขางลางเปนฟงกชนrep ทสรางเวกเตอรหนงโดยม elements ทเหมอนกนทง-หมด
> rep(1, 30)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
ฟงกชน sequence สรางอนกรมของลำดบของจำนวนเตมโดยทตวเลขสนสดแตละตวคอจำนวนทใหไวตามอารกวเมนตดงน
19
> sequence(4:5)
[1] 1 2 3 4 1 2 3 4 5
> sequence(c(10,5))
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5
ฟงกชน gl (generate levels) เปนฟงกชนทมประโยชนมากเนองจากเปนฟงกชนทสรางอนกรมปกตของ factors การใชงานของฟงกชนนคอ gl(k,n) โดยท k คอจำนวนของ levels (หรอ classes) และ n เปนการทำซำในแตละ level มสองตวเลอกอาจถกทใชไดคอ ใช length เพอระบจำนวนตวเลขของขอมลทถกสรางและ labels เพอระบชอของ levels ของ factors ดงตวอยางตอไปน
> gl(3, 5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> gl(3, 5, length=30)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> gl(2, 6, label=c("Male", "Female"))
[1] Male Male Male Male Male Male
[7] Female Female Female Female Female Female
Levels: Male Female
> gl(2, 10)
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
Levels: 1 2
> gl(2, 1, length=20)
[1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
Levels: 1 2
> gl(2, 2, length=20)
[1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2
Levels: 1 2
สดทายฟงกชน expand.grid() สรางกรอบขอมลรวมกบการรวมของเวกเตอรหรอของ factors ทงหมดทถกกำหนดใหตามอารกวเมนต ดงตวอยางตอไปน
> expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female"))
h w sex
1 60 100 Male
2 80 100 Male
3 60 300 Male
4 80 300 Male
20
5 60 100 Female
6 80 100 Female
7 60 300 Female
8 80 300 Female
3.4.2 ลำดบแบบสม (random sequences)
กฎ (law) ฟงกชน
Gaussian (normal) rnorm(n, mean=0, sd=1)
exponential rexp(n, rate=1)
gamma rgamma(n, shape, scale=1)
Poisson rpois(n, lambda)
Weibull rweibull(n, shape, scale=1)
Cauchy rcauchy(n, location=0, scale=1)
beta rbeta(n, shape1, shape2)
‘Student’ (t) rt(n, df)
Fisher–Snedecor (F ) rf(n, df1, df2)
Pearson (χ2) rchisq(n, df)
binomial rbinom(n, size, prob)
multinomial rmultinom(n, size, prob)
geometric rgeom(n, prob)
hypergeometric rhyper(nn, m, n, k)
logistic rlogis(n, location=0, scale=1)
lognormal rlnorm(n, meanlog=0, sdlog=1)
negative binomial rnbinom(n, size, prob)
uniform runif(n, min=0, max=1)
Wilcoxon’s statistics rwilcox(nn, m, n), rsignrank(nn, n)
มนเปนประโยชนในทางสถตทสามารถสรางขอมลแบบสมไดและ R สามารถทำแบบนนไดสำหรบจำนวนขนาดใหญของฟงกชนความหนาแนนและความนาจะเปน ฟงกชนเหลานอยในรปของ rfunc(n, p1, p2, ...) โดยท func บงบอกถงการแจกแจงความนาจะเปน (probability distribution) สวน n เปนจำนวนของขอมลทถกสรางและp1, p2, . . . เปนคาพารามเตอรของการแจกแจงนน จากตารางขางบนไดใหรายละเอยดของแตละการแจกแจงและคาปรยายทเปนไปได (ถาไมมคาปรยายบงบอกไวนนหมายความวาพารามเตอรตองถกระบโดยผใช R)
ฟงกชนสวนใหญมฟงกชนทเปนคกนหรอใกลเคยงกนโดยไดมาจากการแทนทตวอก-ษร r ดวยตวอกษร d, p หรอ q ไดตามลำดบดงนคอ the probability density (dfunc(x,
21
...)), the cumulative probability density(pfunc(x, ...)) และ the value ofquantile (qfunc(p, ...), with 0 < p < 1) สองชดสดทายของฟงกชนสามารถถกใชเพอหาคาวกฤตหรอคา P -values ของการทดสอบทางสถต ตวอยางเชน คาวกฤตสำหรบการทดสอบแบบสองทาง (two-tailed) ตามการแจกแจงตามปกต (normal distribution) ทระดบนยสำคญเทากบ 0.05 ดงตวอยางตอไปน
> qnorm(0.025)
[1] -1.959964
> qnorm(0.975)
[1] 1.959964
สำหรบกรณการทดสอบแบบเดยวกนในรปแแบบทางเดยว (one-tailed) สามารถใช qnorm(0.05)หรอใช 1-qnorm(0.95) ซงการใชขนอยกบรปแบบของสมมตฐานตวเลอก (alternativehypothesis)สำหรบคา P -value ของการทดสอบหนงกลาวไดวา χ2 = 3.84 ท df = 1 ดงตวอยางขางลางน
> 1 - pchisq(3.84, 1)
[1] 0.05004352
3.5 การจดการออบเจกต (Manipulating objects)
3.5.1 การสรางออบเจกต
เราไดเหนวธทแตกตางกนกอนหนานในการสรางออบเจกตโดยการใช assign operator ซงเปนโหมดและชนดของออบเจกต ทโดยทวไปถกสรางตามทกำหนดใหแบบแนนอน มความเปนไปไดในการสรางออบเจกตหนงและระบโหมด ความยาว ชนดและอนๆ ใหกบออยเจก-ตนน การเขาถงในการสรางออบเจกตนเปนเรองนาสนใจในภาพรวมของการจดการออบเจกตตวอยางเชน ผใช R สามารถสราง ‘empty’ออบเจกต และตอจากนนดดแปลงอลเมนทของมนใหสำเรจไดซงมประสทธภาพมากกวาการใสอลเมนททงหมดไปดวยกนดวยฟงกชนc() สำหรบระบบการทำดชน (indexing system) อาจถกใชไดในสวนนตามทเราจะไดเหนตอไป (หนา 32)
การสรางออบเจกตจากออบเจกตอนมกมความสะดวกมากกวา ตวอยางเชน ถาผใช Rตองการสรางอนกรมของแบบจำลองทเหมาะสม สามารถทำไดงายทจะใสสตรในรายการและถดจากนนสกดหรอดงอลเมนท ออกมาใหสำเรจเพอทจะใสอลเมนทเหลานนในฟงกชน lm
ในขนตอนนของการเรยนรของเราในเรอง R ความสนใจในการเรยนรการใชฟงกชนตอจากนไมเพยงแตใชงานในทางปฏบตไดจรงแตยงสามารถนำไปใชในการสอนไดดวย การสรางออบเจกตอยางรจรงทำใหสามารถเขาใจโครงสรางเหลานไดและทำใหเราไปไดไกลมาก
22
ขนในเรองแนวคดบางอยางของ R ทไดกลาวไวกอนหนาน
Vector ฟงกชน vector เปนฟงกชนทม 2 อารกวเมนตคอ mode (โหมด) และ length(ความยาว) การสรางเวกเตอรหนงซงอลเมนทมคาหนงทขนอยกบโหมดทถกระบใหเปนอารกวเมนตหนง ดงน 0 ถาเปนตวเลข FALSE ถาเปนทางตรรกะ หรอ ""
ถาเปนอกขระ ฟงกชนตอไปนใหผลแบบเดยวกนอยางแนนอน และมสำหรบอารกว-เมนตเดยวทมความยาวของเวกเตอรคอ numeric(), logical() และ character()
Factor factor หนงไมไดหมายรวมถงเพยงคาของตวแปรทเปน corresponding categoricalเทานนแตหมายรวมถง levels ทเปนไปไดตาง ๆ ของตวแปรนน (หรอแมแตพวกมนไมปรากฏในขอมล) ฟงกชน factor สราง factor หนงดวยตวเลอกดงตอไปน
factor(x, levels = sort(unique(x), na.last = TRUE),
labels = levels, exclude = NA, ordered = is.ordered(x))
จากขางบน levels ระบ levels ทเปนไปไดของ factor (โดยคาปรยาย คานมความเฉพาะของเวกเตอร x) labels กำหนดชอของ levels exclude คาของ x หมายถงการเอาออกไปจาก levels และ ordered เปนอารกวเมนตทางตรรกะในการระบวา levels ของ factor ถกจดเรยงลำดบหรอไม เพอระลกหรอยอนกลบไปดวา x เปนของโหมดตวเลขหรอโหมดอกขระ ตอไปนเปนบางตวอยาง
> factor(1:3)
[1] 1 2 3
Levels: 1 2 3
> factor(1:3, levels=1:5)
[1] 1 2 3
Levels: 1 2 3 4 5
> factor(1:3, labels=c("A", "B", "C"))
[1] A B C
Levels: A B C
> factor(1:5, exclude=4)
[1] 1 2 3 NA 5
Levels: 1 2 3 5
ฟงกชน levels สกด levels ทเปนไปไดของ factor หนง ดงตวอยางตอไปน
> ff <- factor(c(2, 4), levels=2:5)
> ff
[1] 2 4
23
Levels: 2 3 4 5
> levels(ff)
[1] "2" "3" "4" "5"
เมทรกซ Matrix เมทรกซหนง จรง ๆ แลวคอเวกเตอรหนงทมลกษณะเฉพาะเพมเตม(dim) ซงโดยตวมนเองคอ เวกเตอรเชงตวเลขกบความยาวทมคาเทากบ 2 และถกนยามวาเปนจำนวนของแถวและคอลมนของเมทรกซนน เมทรกซหนงสามารถถกสรางดวยฟงกชน matrix ดงตวอยางตอไปน
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
dimnames = NULL)
โดยตวเลอก ฟงกชน byrow บงบอกวาคาทใหมาโดยคำสง data ตองใสคอลมน(โดยคาปรยาย) หรอแถว (ถาเปนจรง TRUE) ตามลำดบหรอไมแสดงดงขางลาง โดยตวเลอกฟงกชน dimnames ทำใหแถวและคอลมนถกใหชอ
> matrix(data=5, nr=2, nc=2)
[,1] [,2]
[1,] 5 5
[2,] 5 5
> matrix(1:6, 2, 3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:6, 2, 3, byrow=TRUE)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
อกวธหนงในการสรางเมทรกซหนงคอการใหคาทเหมาะสมตอลกษณะเฉพาะ (dim)(ซงเปนคา NULL ในตอนแรก)
> x <- 1:15
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
> dim(x)
NULL
> dim(x) <- c(5, 3)
> x
24
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 2 7 12
[3,] 3 8 13
[4,] 4 9 14
[5,] 5 10 15
กรอบขอมล (Data frame) เราไดเหนอยางชดเจนวากรอบขอมลถกสรางโดยฟงกชน read.table
มความเปนไปไดทจะสรางกรอบขอมลดวยฟงกชน data.frame ดงนนเวกเตอรทประกอบอยในกรอบขอมลตองเปน เวกเตอรทมความยาวเทากน หรอถาเวกเตอรหนงเวกเตอรใดสนกวา เวกเตอรนนจะถก “recycled” เปนจำนวนทงหมดของครงตอไปนคอตวอยาง
> x <- 1:4; n <- 10; M <- c(10, 35); y <- 2:4
> data.frame(x, n)
x n
1 1 10
2 2 10
3 3 10
4 4 10
> data.frame(x, M)
x M
1 1 10
2 2 35
3 3 10
4 4 35
> data.frame(x, y)
Error in data.frame(x, y) :
arguments imply differing number of rows: 4, 3
ถา factor หนงเปนสวนหนงของกรอบขอมลแลว factor นตองมความยาวเดยว-กนกบเวกเตอร มความเปนไปไดทจะเปลยนชอของคอลมน อยางเชน ดวยฟงกชนdata.frame(A1=x, A2=n)ผใช R สามารถใหชอของแถว โดยใชอกฟงกชนทเปนอกหนงตวเลอกไดเชนเดยวกนคอ row.names ซงแนนอนวาตองเปนเวก-เตอรหนงของโหมดอกขระและความยาวเทากบจำนวนบรรทดของกรอบขอมล ทายทสดเปนทสงเกตวากรอบขอมลมลกษณะเฉพาะ (dim) ทมความคลายคลงกนกบเมทรกซ
รายการ (List) รายการหนงถกสรางขนในทางทคลายคลงกบกรอบขอมลดวยฟงกชน list
ไมมขอจำกดบนออบเจกตซงสามารถถกรวบรวมไวได ในทางตรงกนขามกบฟงกชน
25
data.frame() ชอตางๆ ของออบเจกตในฟงกชน list ไมไดถกไดมาโดยคาปรยาย ตอไปนเปนตวอยางการใชฟงกชน list ทมเวกเตอร x และเวกเตอร yของตวอยางกอนหนาน
> L1 <- list(x, y); L2 <- list(A=x, B=y)
> L1
[[1]]
[1] 1 2 3 4
[[2]]
[1] 2 3 4
> L2
$A
[1] 1 2 3 4
$B
[1] 2 3 4
> names(L1)
NULL
> names(L2)
[1] "A" "B"
อนกรมเวลา(Time-series) ฟงกชน ts สรางออบเจกตหนงของ class "ts" จากเวก-เตอรหนง (single time-series) หรอเมทรกซหนง (multivariate time-series) และตวเลอกบาง ตวเลอกซงอธบายลกษณะอนกรมนน ๆ ตอไปนเปนตวเลอกกบคาปร-ยาย
ts(data = NA, start = 1, end = numeric(0), frequency = 1,
deltat = 1, ts.eps = getOption("ts.eps"), class, names)
26
data เวกเตอรหรอเมทรกซstart เวลาของการสงเกตครงแรก ซงไมเปนตวเลขกเปนเวกเตอรของจำ-
นวนเตมสองจำนวน (ดตวอยางขางลาง)end เวลาของการสงเกตครงสดทายซงระบเปนวธเดยวกนกบ start
frequency จำนวนของการสงเกตตอหนวยเวลาdeltat เศษสวนของชวงเวลาของการสมตวอยางระหวางการสงเกตอยาง
ตอเนอง (เชน 1/12 ในขอมลรายเดอน) ซงจะกำหนดเฉพาะfrequency หรอ deltat เทานน
ts.eps ความทนทานสำหรบการเปรยบเทยบของอนกรม ความถถกพจาร-ณาวาเทากนถาความแตกตางของความถมคานอยกวา ts.eps
class คลาสทสงผานไปยงออบเจกต คาปรยายคอ "ts" สำหรบอนกรมเดยว และ c("mts", "ts") สำหรบอนกรมหลายตวแปร
names เวกเตอรของโหมดอกขระพรอมกบชอของอนกรมแตละตว ในกร-ณของอนกรมหลายตวแปร ชอของคอลมน ของ data หรอSeries 1, Series 2, . . . จะเปนคาโดยปรยาย
ตอไปนเปนการยกตวอยางบางตวอยางทถกสรางขนดวยฟงกชน ts:
> ts(1:10, start = 1959)
Time Series:
Start = 1959
End = 1968
Frequency = 1
[1] 1 2 3 4 5 6 7 8 9 10
> ts(1:47, frequency = 12, start = c(1959, 2))
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1959 1 2 3 4 5 6 7 8 9 10 11
1960 12 13 14 15 16 17 18 19 20 21 22 23
1961 24 25 26 27 28 29 30 31 32 33 34 35
1962 36 37 38 39 40 41 42 43 44 45 46 47
> ts(1:10, frequency = 4, start = c(1959, 2))
Qtr1 Qtr2 Qtr3 Qtr4
1959 1 2 3
1960 4 5 6 7
1961 8 9 10
> ts(matrix(rpois(36, 5), 12, 3), start=c(1961, 1), frequency=12)
Series 1 Series 2 Series 3
Jan 1961 8 5 4
27
Feb 1961 6 6 9
Mar 1961 2 3 3
Apr 1961 8 5 4
May 1961 4 9 3
Jun 1961 4 6 13
Jul 1961 4 2 6
Aug 1961 11 6 4
Sep 1961 6 5 7
Oct 1961 6 5 7
Nov 1961 5 5 7
Dec 1961 8 5 2
นพจน (Expression) ออบเจกตของนพจนของโหมดมหนาทพนฐานหนงใน R ซงนพจนหนงเปนอนกรมของอกขระทเปนเหตเปนผลสำหรบ R ชดคำสงทใชงานไดทงหมดคอนพจน เมอคำสงหนงถกพมพโดยตรงบนคยบอรดคำสงนนจะถกประเมนประเมน(evaluated) โดย R และถกดำเนนการ (executed) ถามนเปนคำสงทใชการได ในหลายสถานการณมนเปนประโยชนทจะสรางนพจนหนงโดยปราศจากการประเมนมนนนคอสงทฟงกชน expression ถกสรางขนมา แนนอนวามนเปนไปไดทจะประ-เมนนพจนไดในภายหลงดวยฟงกชน eval().
> x <- 3; y <- 2.5; z <- 1
> exp1 <- expression(x / (y + exp(z)))
> exp1
expression(x/(y + exp(z)))
> eval(exp1)
[1] 0.5749019
นพจนสามารถถกใชรวมกบสงอนเพอประกอบเปนสมการในกราฟ (หนา 50) น-พจนหนงสามารถถกสรางจากตวแปรหนงของโหมดอกขระ บางฟงกชนนำนพจนมาเปนอารกวเมนต ยกตวอยางดงตอไปนคอ D ซงสงกลบ (return) อนพนธยอย(partial derivatives)
> D(exp1, "x")
1/(y + exp(z))
> D(exp1, "y")
-x/(y + exp(z))^2
> D(exp1, "z")
-x * exp(z)/(y + exp(z))^2
28
3.5.2 การปรบเปลยนออบเจกต (converting objects)
แนนอนเราไดตระหนกแลววาความแตกตางระหวางบางชนดของออบเจกตมเลกนอย ดง-นนมนเปนเหตเปนผลวาเปนไปไดทเปลยนจากออบเจกตหนงจากชนดหนงไปเปนอกชนดหนงโดยการเปลยนแปลงบางอยางของ ลกษณะเฉพาะ (attributes) ของมน การเปลยน-แปลงนจะถกกระทำดวยฟงกชนชนดหนง as.something. R (version 2.1.0) ในแพกเกจ base และ utils มถง 98 ฟงกชน ดงนนเราจะไมลงใหลกในรายละเอยดในทน
ผลของปรบเปลยนออบเจกตหนงแนนอนวาขนอยกบลกษณะเฉพาะของออบเจกตทถกปรบเปลยน (converted object) โดยทวไปการปรบเปลยนทำตามหลกการพนฐาน ตารางตอไปนสรปเงอนไขการปรบเปลยนของโหมดตาง ๆ
การปรบเปลยนโหมดเปน ฟงกชน เกณฑ
โหมดตวเลข as.numeric FALSE → 0TRUE → 1
"1", "2", . . . → 1, 2, . . ."A", . . . → NA
โหมดตรรกะ as.logical 0 → FALSE
other numbers → TRUE
"FALSE", "F" → FALSE
"TRUE", "T" → TRUE
other characters → NA
โหมดอกขระ as.character 1, 2, . . . → "1", "2", . . .FALSE → "FALSE"
TRUE → "TRUE"
มฟงกชนตางๆ ทปรบเปลยนชนดของออบเจกต ตวอยางเชน (as.matrix, as.ts,as.data.frame, as.expression เปนตน ฟงกชนเหลานจะมผลตอลกษณะเฉพาะมากกวามผลตอโหมดในระหวางการปรบเปลยน ผลของการปรบเปลยนนตามทกลาวไวกอน-หนาโดยทวไปเปนไปตามหลกการพนฐาน ในสถานการณหนงทมกพบบอยคอการปรบเปลยนของ factors ใหเปนคาตวเลข ในกรณน R ทำการปรบเปลยนดวยการทำรหสตวเลขของlevels ของ factor ดงตวอยางตอไปน
> fac <- factor(c(1, 10))
> fac
[1] 1 10
Levels: 1 10
29
> as.numeric(fac)
[1] 1 2
เมอทำการพจารณาถง factor ของโหมดอกขระ ตวอยางตอไปนจะดเปนเหตเปนผล
> fac2 <- factor(c("Male", "Female"))
> fac2
[1] Male Female
Levels: Female Male
> as.numeric(fac2)
[1] 2 1
ขอสงเกตคอผลทไดขางตนไมเปน NA ตามทถกคาดหมายไวตามตารางขางตนเพอปรบเปลยน factor ของโหมดตวเลขใหกลายเปนเวกเตอรตวเลขแตยงคงเกบ levels
ไวตามทถกระบไวในรปแบบดงเดม ผใช R ตองปรบเปลยนใหกลายเปนอกขระ characterตงแตแรกกอนแลวจงปรบเปลยนเปนตวเลขในลำดบถดมา
> as.numeric(as.character(fac))
[1] 1 10
กระบวนการนเปนประโยชนมากถาในไฟลหนงประกอบดวยตวแปรตวเลขทมคาทไมเปนตวเลข (non-numeric values) อยดวย เราไดเหนวา read.table() ในเงอนไขนจะเปนคาปรยายโดยอานคอลมนนเปน factor
3.5.3 ตวดำเนนการ (operators)
เราไดเหนแลวกอนหนานวามตวดำเนนการ 3 ชนดหลกใน R10 ตารางตอไปนเปนรายการของตวดำเนนการ
ตวดำเนนการทางเรขาคณต ทางการเปรยบเทยบ ทางตรรกะ
+ บวก < นอยกวา ! x ตรรกะ ไม- ลบ > มากกวา x & y ตรรกะ และ* คณ <= นอยกวาหรอเทากบ x && y เหมอนคำอธบายดานบน/ หาร >= มากกวาหรอเทากบ x | y ตรรกะ หรอˆ ยกกำลง == เทากบ x || y เหมอนคำอธบายดานบน%% การหาเศษทเหลอจากการหาร != ไมเทากบ xor(x, y) เฉพาะ หรอ%/% การหารใหปดเศษเปนจำนวนเตม
10ลกษณะตอไปนเปนตวดำเนนการเชนกนสำหรบ R $, @, [, [[, :, ?, <-, «-, =, :: ตารางของตวดำเนนการซงถกอธบายเกยวกบหลกสำคญเกยวกบตวดำเนนการสามารถหาไดจาก ?Syntax.
30
ตวดำเนนการเลขคณตและเปรยบเทยบกระทำการตอ elements 2 ตว (x + y, a <
b)ตวดำเนนการเลขคณต ไมเพยงแตกระทำการตอตวแปรของโหมดตวเลขหรอโหมดเชง-ซอนเทานนแตยงกระทำการตอตวแปรตรรกะดวย ในกรณหลงคาตรรกะถกบงคบใหกลายเปนตวเลข ตวดำเนนการเปรยบเทยบอาจถกนำไปใชกบโหมดใด ๆ กไดหมายความวาตวดำเนนการนใหผลกลบมาเปนคาตรรกะคาหนงหรอหลายคา
ตวดำเนนการตรรกะถกนำไปใชตอออบเจกตหนงออบเจกต(!) หรอสองออบเจกตของโหมดตรรกะและสงกลบมาเปนคาตรรกะหนงคาหรอหลายคา ตวดำเนนการ “AND” และ“OR” มอยสองรปแบบหมายความวา กรณรปแบบเดยว (single) ดำเนนการตอ elementsแตละตวของออบเจกตและไดผลกลบคนเปนคาตรรกะหลายคา ตามการเปรยบเทยบทไดถกกระทำ และกรณรปแบบค (double) ตวดำเนนการกระทำตอ element ตวแรกสดของออบเจกต
โดยมความจำเปนทตองใชตวดำเนนการ “AND” เพอระบความไมเทากนของชนด 0 <
x < 1 ซงถกทำรหสดวย 0 < x & x < 1 นพจน 0 < x < 1 ใชไดและถกตองแตจะไมสงคากลบตามทคาดหมาย หมายความวาเนองจากตวดำเนนการทงคเปนสงเดยวกนและจะถกดำเนนการตามลำดบจากซายไปขวา การเปรยบเทยบ 0 < x จะถกกระทำแรกสดและไดผลกลบเปนคาตรรกะซงหลงจากนนจะถกเปรยบเทยบกบ 1 (TRUE or FALSE < 1)ในสถานการณนหมายความวา คาตรรกะถกบงคบทางออมใหกลายเปนคาตวเลข (1 หรอ 0< 1) ดงตวอยางตอไปน
> x <- 0.5
> 0 < x < 1
[1] FALSE
ตวดำเนนการเปรยบเทยบดำเนนการตออลเมนทแตละตวของ 2 ออบเจกตซงถกเปรยบ-เทยบ (การนำคากลบมาใชของคาทนอยทสดถาจำเปน) และหลงจากนนจะสงคาออบเจกตทมขนาดเดยวกนกลบมา เพอเปรยบเทยบออบเจกต 2 ออบเจกตทงหมด ม 2 ฟงกชนทใชไดคอ identical และ all.equal ดงตวอยางตอไปน
> x <- 1:3; y <- 1:3
> x == y
[1] TRUE TRUE TRUE
> identical(x, y)
[1] TRUE
> all.equal(x, y)
[1] TRUE
identical เปรยบเทยบการเปนตวแทนภายในของขอมลและนำคากลบเปน TRUE
ถาออบเจกตเหมอนกนอยางสมบรณ และไมเชนนนแลวเปน FALSE สวน all.equal
เปรยบเทยบ “near equality” ของ 2 ออบเจกตและนำกลบมาเปน TRUE หรอแสดงสรป
31
ของความแตกตาง สำหรบฟงกชน all.equal นำการประมาณของกระบวนการคำนวณมาพจารณาดวย เมอทำการเปรยบเทยบคาตวเลข การเปรยบเทยบของคาตวเลขในคอมพว-เตอรบางครงเปนเรองนาประหลาดใจ
> 0.9 == (1 - 0.1)
[1] TRUE
> identical(0.9, 1 - 0.1)
[1] TRUE
> all.equal(0.9, 1 - 0.1)
[1] TRUE
> 0.9 == (1.1 - 0.2)
[1] FALSE
> identical(0.9, 1.1 - 0.2)
[1] FALSE
> all.equal(0.9, 1.1 - 0.2)
[1] TRUE
> all.equal(0.9, 1.1 - 0.2, tolerance = 1e-16)
[1] "Mean relative difference: 1.233581e-16"
3.5.4 การเขาถงคาของออบเจกต: ระบบการทำดชน (indexing system)
ระบบการทำดชน (indexing system) เปนวธทมประสทธภาพและยดหยนในการเขาถงอลเมนททเลอกไวของ ออบเจกตซง ไมเปน ตวเลข กตองเปน ตรรกะ เพอทจะเขาถงคา ตว-อยางเชน คาทสามของเวกเตอร x เราเพยงแตพมพ x[3] ซงสามารถถกใชในกรณเพอสกดเอาขอมลหรอเพอเปลยนคานน ๆ ดงตวอยางตอไปน
> x <- 1:5
> x[3]
[1] 3
> x[3] <- 20
> x
[1] 1 2 20 4 5
ดชนโดยตวมนเองสามารถเปนเวกเตอรของโหมดตวเลขได ดงตวอยาง
> i <- c(1, 3)
> x[i]
[1] 1 20
ถา x เปนเมทรกซหรอกรอบขอมลหนงแลวคาของบรรทดท i และคอลมนท j จะถกเขาถงดวย x[i,j] เพอเปนการเขาถงคาทงหมดของแถวหรอคอลมนทกำหนดให ผใช Rตองละดชนทเหมาะสมแตจะตองไมลมเครองหมาย , ดงตวอยางตอไปน
32
> x <- matrix(1:6, 2, 3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> x[, 3] <- 21:22
> x
[,1] [,2] [,3]
[1,] 1 3 21
[2,] 2 4 22
> x[, 3]
[1] 21 22
เราไดสงเกตเหนอยางแนชดแลววาผลลพธสดทายเปนเวกเตอรไมใชเมทรกซ โดยลก-ษณะการตอบสนองทเปนโดยปรยายของ R คอการคนคาออบเจกตทมมต (dimension)นอยทสดเทาทจะเปนไปไดกลบมา กรณนสามารถเปลยนแปลงไดดวยการเลอกใชฟงกชนdrop ซงมคาโดยปรยายเปน TRUEดงตวอยางตอไปน
> x[, 3, drop = FALSE]
[,1]
[1,] 21
[2,] 22
ระบบการทำดชนน ถกทำใหเปนทวไปโดยงายโดยการใชอารเรย ไดดชนมากมายเทากบจำนวนของมตของอารเรย ตวอยางเชน อารเรย 3 มต (x[i, j, k], x[, , 3], x[,, 3, drop = FALSE]) และตอไปเรอย ๆ มนเปนประโยชนทจะจำวาการทำดชนถกทำโดยเครองหมายวงเลบเหลยม (square brackets) ขณะทวงเลบกลม (parentheses) ถกใชสำหรบอารกวเมนตของฟงกชน
> x(1)
Error: couldn’t find function "x"
การทำดชนยงสามารถถกใชเพอยกเลก (suppress) จำนวนแถวหรอคอลมนทงหนงหรอหลายจำนวนโดยการใชคาลบ ตวอยางเชน x[-1, ] จะยกเลกแถวทหนงขณะท x[-c(1,15), ] จะกระทำการเหมอนกนสำหรบแถวท 1 และแถวท 15 สวนการใชเมทรกซ ถกกำหนดดงขางตน
> x[, -1]
[,1] [,2]
[1,] 3 21
33
[2,] 4 22
> x[, -(1:2)]
[1] 21 22
> x[, -(1:2), drop = FALSE]
[,1]
[1,] 21
[2,] 22
สำหรบเวกเตอร เมทรกซ และอารเรย นนเปนไปไดทจะเขาถงคาของอลเมนทหนงดวยนพจนเปรยบเทยบ ดงดชนตอไปน
> x <- 1:10
> x[x >= 5] <- 20
> x
[1] 1 2 3 4 20 20 20 20 20 20
> x[x == 1] <- 25
> x
[1] 25 2 3 4 20 20 20 20 20 20
การใชในทางปฏบตของการทำดชนตรรกะ ตวอยางเชน ความเปนไปไดทจะเลอก elementsของจำนวนเตมทเปนเลขค ดงตอไปน
> x <- rpois(40, lambda=5)
> x
[1] 5 9 4 7 7 6 4 5 11 3 5 7 1 5 3 9 2 2 5 2
[21] 4 6 6 5 4 5 3 4 3 3 3 7 7 3 8 1 4 2 1 4
> x[x %% 2 == 0]
[1] 4 6 4 2 2 2 4 6 6 4 4 8 4 2 4
ดงนน ระบบการทำดชนนใชคาตรรกะกลบคนมาแลวดงในตวอยางขางตนโดยใชตวดำ-เนนการเปรยบเทยบ คาตรรกะเหลานสามารถถกคำนวณกอนแลวคาเหลานถกนำกลบไปใชถาจำเปน ดงตวอยางตอไปน
> x <- 1:40
> s <- c(FALSE, TRUE)
> x[s]
[1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
การทำดชนตรรกะสามารถถกใชกบกรอบขอมลไดดวยแตมขอระวงเนองจากคอลมนทแตกตางกนของกรอบขอมลอาจจะมโหมดทแตกตางกน
34
สำหรบการแสดงรายการ (lists) ในการเขาถง elements ทแตกตางกนสามารถเปนออบเจกตชนดใดกไดทถกกระทำโดยม square brackets เดยวหรอไมกม square bracketsค หมายความวาความแตกตางนคอ single brackets ทำใหไดรายการกลบคนมาในขณะทdouble brackets สกด (extract) ออบเจกตจากรายการ เมอนนผลทไดนสามารถถกทำ-ใหเปนดชนดวยตวเองตามทไดเหนกอนหนานสำหรบเวกเตอร เมทรกซและอน ๆ ตวอยางเชน ถาออบเจกตท 3 ของรายการหนงเปนเวกเตอรหนง คาท i ของมนสามารถถกเขาถงไดโดยการใช my.list[[3]][i] และถาเปนอารเรย 3 มต my.list[[3]][i, j,
k] และอนๆ ความแตกตางอกอยางหนงคอวา my.list[1:2] จะนำรายการหนงกลบเขามาดวยอลเมนททหนงและทสองของรายการดงเดม ขณะท my.list[[1:2]] จะใหผลลพธทไมไดตามทคาดหมาย
3.5.5 การเขาถงคาตาง ๆ ของออบเจกตโดยชอ
ชอ names เปนการลงรายการของอลเมนทของออบเจกตหนงดงนนจงเปนโหมดอกขระโดยทวไปชอเหลานเปนลกษณะเฉพาะทเปนตวเลอก (optional attributes) โดยทมชนดของชอหลายชนด ตวอยางเชน names, colnames, rownames และ dimnames
ชอของเวกเตอรหนงถกเกบในเวกเตอรหนงของออบเจกต ทมความยาวเทากนและสา-มารถถกเขาถงดวยฟงกชน names ได ดงตวอยางตอไปน
> x <- 1:3
> names(x)
NULL
> names(x) <- c("a", "b", "c")
> x
a b c
1 2 3
> names(x)
[1] "a" "b" "c"
> names(x) <- NULL
> x
[1] 1 2 3
สำหรบเมทรกซและกรอบขอมลแลว colnames และ rownames คอ การลงรายการของคอลมนและแถวตามลำดบซงสามารถถกเขาถงไดไมวาจะเปน respective functions ของมน หรอ dimnames ซงเปนการนำรายการกลบเขามาโดยเวกเตอรทงค ดงตวอยางตอไปน
> X <- matrix(1:4, 2)
> rownames(X) <- c("a", "b")
> colnames(X) <- c("c", "d")
35
> X
c d
a 1 3
b 2 4
> dimnames(X)
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d"
สำหรบอารเรยชอของมตสามารถถกเขาถงไดโดย ฟงกชน dimnames ดงตวอยางตอไปน
> A <- array(1:8, dim = c(2, 2, 2))
> A
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
> dimnames(A) <- list(c("a", "b"), c("c", "d"), c("e", "f"))
> A
, , e
c d
a 1 3
b 2 4
, , f
c d
36
a 5 7
b 6 8
ถาอลเมนทของออบเจกตหนงมชอแลวมนสามารถถกสกดออกมาไดโดยการใชอลเมนทตามดชน ตามจรงแลวศพททควรเรยกคอ “subsetting” มากกวา “extraction” เนองจากลกษณะเฉพาะของออบเจกต ตนฉบบถกเกบไว ตวอยางเชน ถากรอบขอมล (dataframe)DF ประกอบดวยตวแปร x, y และ z การใชคำสง DF["x"] จะนำ กรอบขอมลกลบเขามาดวย x เทานนสวนคำสง DF[c("x", "y")] จะนำกรอบขอมลกลบเขาดวยตวแปรทง x และ y การทำงานดวยรายการกเชนกนถา elements ในรายการนนมชออย
ตามทผอานไดตระหนกแนนอนแลววาดชนทถกใชในทนเปนเวกเตอรหนงของโหมดอก-ขระคลายกบเวกเตอรตวเลขหรอเวกเตอรตรรกะทไดเหนขางตน เวกเตอรนสามารถถกกำ-หนดไดกอนและตอมาสามารถถกใชสำหรบการสกด (extraction)
เพอสกดเวกเตอรหนงหรอ factor หนงจากกรอบขอมล ผใช R สามารถใชตวดำเนนการ $ (ตวอยางเชน DF$x) การกระทำโดยตวดำเนนการนสามารถใชกบการทำรายการไดเชนกน
3.5.6 ตวปรบแกขอมล (data editor)
มนเปนไปไดทจะใชตวปรบแกทคลายกบตารางทำกราฟก (graphical spreadsheet-like editor)เพอปรบแก ออบเจกตของ “ขอมล” ตวอยางเชน ถา X เเปนเมทรกซแลว คำสง data.entry(X)จะเปดตวปรบแกกราฟก (graphic editor) และผใช R จะสามารถเปลยนแปลงคาบางคาโดยการกด (clicking) ไปบนเซลลทเหมาะสมหรอเพมคอลมนหรอแถวใหมได
ฟงกชน data.entry เปลยนแปลงออบเจกตนนโดยตรงตามทถกกำหนดใหโดยอารกวเมนตโดยไมตองกำหนด (assign) ผลของอารกวเมนต ในทางตรงกนขามฟงกชนde นำรายการกลบเขามากบออบเจกตทถกกำหนดใหตามอารกวเมนตและอาจถกเปลยน-แปลงได ผลนถกแสดงบนหนาจอโดยปรยายแตในสวนของฟงกชนสวนใหญสามารถถกกำ-หนดไปทออบเจกตได
รายละเอยดของการใชตวปรบแกขอมลขนกบระบบปฏบตการ
3.5.7 เลขคณตและฟงกชนอยางงาย (arithmetics and simple functions)
มหลายฟงกชนใน R ทใชจดการขอมลได เราไดเหนแลวสำหรบฟงกชนทงายทสดฟงกชนหนงคอ c ซงเชอมตอ (concatenate) ออบเจกตทถกลงรายการไวในเครองหมายวงเลบ () ดงตวอยางตอไปน
> c(1:5, seq(10, 11, 0.2))
[1] 1.0 2.0 3.0 4.0 5.0 10.0 10.2 10.4 10.6 10.8 11.0
37
เวกเตอรสามารถถกใชเพอจดการกบนพจนเลขคณตดงเดมได ดงตวอยางตอไปน
> x <- 1:4
> y <- rep(1, 4)
> z <- x + y
> z
[1] 2 3 4 5
เวกเตอรทมความยาวแตกตางกนสามารถถกรวมเขาดวยกนไดโดยในกรณนเวกเตอรทสนทสดถกนำกลบมาใช ดงตวอยางน
> x <- 1:4
> y <- 1:2
> z <- x + y
> z
[1] 2 4 4 6
> x <- 1:3
> y <- 1:2
> z <- x + y
Warning message:
longer object length
is not a multiple of shorter object length in: x + y
> z
[1] 2 4 4
ขอสงเกตคอ R ใหผลเปนขอความเตอน (warning message) และไมใชขอความผด-พลาด (error message) ดงนนการดำเนนการไดถกกระทำไปแลว ถาเราตองการเพม (หรอคณ) คาทเหมอนกนแก elements ทงหมดของเวกเตอรหนงสามารถทำไดดงตวอยางตอไปน
> x <- 1:4
> a <- 10
> z <- a * x
> z
[1] 10 20 30 40
ฟงกชนทใชไดใน R สำหรบการจดการขอมลมมากเกนกวาทจะถกแสดงรายการในทน ผใช R สามารถหาฟงกชนคณตศาสตรพนฐานทงหมด (log, exp, log10, log2,sin, cos, tan, asin, acos, atan, abs, sqrt และอนๆ) ฟงกชนพเศษ (gamma,digamma, beta, besselI และอนๆ) เชนเดยวกนกบฟงกชนตางๆ ทเปนประโยชนในทางสถต บางฟงกชนเหลานถกแสดงรายการไวในตารางดงตอไปน
38
sum(x) ผลรวมของอลเมนทของ xprod(x) ผลทไดของอลเมนทของ xmax(x) คาสงสดของอลเมนทของ xmin(x) คาตำสดของอลเมนทของ xwhich.max(x) ไดผลกลบมาเปนดชนของอลเมนททมากสดของ xwhich.min(x) ไดผลกลบมาเปนดชนของอลเมนททนอยสดของ xrange(x) เหมอนคำอธบายดานบน than c(min(x), max(x))
length(x) จำนวนของอลเมนทใน x
mean(x) คาเฉลยเลขคณตของอลเมนทของ xmedian(x) คามธยฐานของอลเมนทของ xvar(x) or cov(x) ความแปรปรวนของอลเมนทของ x (ถกคำนวณท n − 1) ถา x เปน
เมทรกซหรอกรอบขอมลแลวเมทรกซระหวางความแปรปรวนและความแปรปรวนรวมถกคำนวณ
cor(x) เมทรกซของสหสมพนธของ x ถามนคอเมทรกซหรอกรอบขอมล (คาเทา-กบ 1 ถา x เปนเวกเตอร)
var(x, y) or cov(x, y) ความแปรปรวนรวมระหวาง x และ y หรอ ระหวางคอลมนของ x และ yถาเปนเมทรกซหรอกรอบขอมล
cor(x, y) สหสมพนธเชงเสนระหวาง x และ y หรอเมทรกซสหสมพนธถาเปนเม-ทรกซหรอกรอบขอมล
ฟงกชนจากตารางขางตนใหคากลบมาเปนคาเดยว เชน เวกเตอรหนงของความยาวหนงคา ยกเวนฟงกชน range ซงคากลบออกมาเปนเวกเตอรหนงของความยาวสองคา และฟงกชน var, cov และ cor ซงอาจใหคากลบออกมาในรปของเมทรกซหนง ฟงกชนในตารางตอไปนใหผลออกมาทซบซอนมากกวาฟงกชนกอนหนาน
round(x, n) ทำใหอลเมนทของ x เปนทศนยม n ตำแหนงrev(x) กลบคาอลเมนทของ xsort(x) แยกประเภทอลเมนทของ x ตามลำดบทเพมขน ถาเรยงอลเมนทของ x ตามลำดบ
ทลดลง ใช rev(sort(x))rank(x) จดอนดบของอลเมนทของ xlog(x, base) คำนวณลอการทมของ x ดวยฐาน base
scale(x) ถา x เปนเมทรกซ เปนศนยกลางและลดขอมล โดยถาเปนศนยกลางเทานนใชตวเลอก center=FALSE ถาเปนลดขอมลเทานนใช scale=FALSE (โดยคาปร-ยาย center=TRUE, scale=TRUE)
pmin(x,y,...) เวกเตอรซงอลเมนทท i เปนคาตำสดของ x[i], y[i], . . .pmax(x,y,...) เหมอนคำอธบายดานบน สำหรบคาตำสดcumsum(x) เวกเตอรซงอลเมนทท i เปนผลรวมจาก x[1] ถง x[i]cumprod(x) เหมอนคำอธบายดานบน สำหรบผลทไดcummin(x) เหมอนคำอธบายดานบน สำหรบคาตำสดcummax(x) เหมอนคำอธบายดานบน สำหรบคาสงสด
39
match(x, y) ไดผลเปนเวกเตอรของความยาวเหมอนกนกบ x ดวยอลเมนทของ x ซงอยใน y
(NA ถาเปนอยางอน)which(x == a) ไดผลเปนเวกเตอรของดชนของ x ถาการดำเนนการเปรยบเทยบเปนจรง (TRUE)
ในตวอยางนคาของ i สำหรบ which x[i] == a (อารกวเมนตของฟงกชนนตองเปนตวแปรของโหมดตรรกะ)
choose(n, k) คำนวณผลรวมของเหตการณ k ครงในการทำซำ n ครง = n!/[(n− k)!k!]
na.omit(x) ยกเลกการสงเกตดวยคาทหายไป (NA) (ยกเลกบรรทดทตรงกนถา x เปนเมทรกซหรอกรอบขอมล)
na.fail(x) ไดผลเปนขอความผดพลาดถา x ประกอบดวยอยางนอยหนง NAunique(x) ถา x เปนเวกเตอรหรอกรอบขอมลแลวใหผลเปนออบเจกตทคลายกนแตอลเมนทท
เหมอนกนถกยกเลกtable(x) ไดผลเปนตารางทมตวเลขของคาทแตกตางกนของ x (โดยทวไปแลวสำหรบจำนวน
เตมหรอ factors)table(x, y) ตารางแจกแจงของ x และ ysubset(x, ...) ไดผลเปนการคดเลอกของ x ตามเกณฑทพจารณา (..., โดยทวไปเปนการ
เปรยบเทยบ เชน x$V1 < 10) โดยท x เปนกรอบขอมล ตวเลอกเปน select
และกำหนดใหตวแปรถกเกบหรอเอาออกไปดวยการใชเครองหมายลบsample(x, size) การสมตวอยางอกครงแบบสมและปราศจากการแทนทอลเมนท size ในเวกเตอร
x ขณะท ตวเลอก replace = TRUE ยอมใหสมอกครงโดยการแทนท
3.5.8 การคำนวณหรอการคณนาเมทรกซ (matrix computation)
R มความงายสำหรบการคำนวณและจดการเมทรกซโดยฟงกชน rbind และฟงกชน cbind
เชอมเมทรกซตามลกษณะของจำนวนแถวหรอจำนวนคอลมนตามลำดบของฟงกชนทกลาวตอไปนคอตวอยาง
> m1 <- matrix(1, nr = 2, nc = 2)
> m2 <- matrix(2, nr = 2, nc = 2)
> rbind(m1, m2)
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] 2 2
[4,] 2 2
> cbind(m1, m2)
[,1] [,2] [,3] [,4]
[1,] 1 1 2 2
[2,] 1 1 2 2
40
ตวดำเนนการสำหรบผลผลตของสองเมทรกซคอ ‘%*%’ ตวอยางเชน พจารณาสองเม-ทรกซคอ m1 และ m2 ขางตน ไดผลดงตอไปน
> rbind(m1, m2) %*% cbind(m1, m2)
[,1] [,2] [,3] [,4]
[1,] 2 2 4 4
[2,] 2 2 4 4
[3,] 4 4 8 8
[4,] 4 4 8 8
> cbind(m1, m2) %*% rbind(m1, m2)
[,1] [,2]
[1,] 10 10
[2,] 10 10
การเปลยนตำแหนง(transposition) ของเมทรกซหนงถกกระทำไดดวยฟงกชน t โดยทฟงกชนนใชงานไดกบกรอบขอมลไดดวย
ฟงกชน diag สามารถถกใชเพอสกดคาหรอเปลยนแปลงแนวทแยงของเมทรกซหรอสรางเมทรกซทแยงมม (diagonal matrix) ดงตวอยางตอไปน
> diag(m1)
[1] 1 1
> diag(rbind(m1, m2) %*% cbind(m1, m2))
[1] 2 2 8 8
> diag(m1) <- 10
> m1
[,1] [,2]
[1,] 10 1
[2,] 1 10
> diag(3)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
> v <- c(10, 20, 30)
> diag(v)
[,1] [,2] [,3]
[1,] 10 0 0
[2,] 0 20 0
41
[3,] 0 0 30
> diag(2.1, nr = 3, nc = 5)
[,1] [,2] [,3] [,4] [,5]
[1,] 2.1 0.0 0.0 0 0
[2,] 0.0 2.1 0.0 0 0
[3,] 0.0 0.0 2.1 0 0
R ยงมฟงกชนพเศษบางฟงกชนสำหรบการคำนวณเมทรกซ ในทนเราจะกลาวถง ฟงก-ชน solve สำหรบการกลบดานเมทรกซ สวนฟงกชน qr สำหรบการแยกเมทรกซ ฟงก-ชน eigen สำหรบการคำนวณคาเฉพาะ (eigenvalues) และเวกเตอรเฉพาะ (eigenvectors)และสดทายฟงกชน svd สำหรบการแยกคาออกเปนเดยว ๆ
42
4 กราฟกโดย R
R ใหกราฟกทมความหลากหลายเปนพเศษ เพอทจะไดหลกการเกยวกบกราฟกใน R ผใชสามารถพมพ demo(graphics) หรอ demo(persp) เปนไปไมไดทจะใหราย-ละเอยดในทนเกยวกบความเปนไปไดของ R ในแงมมของกราฟกเนองจากโดยเฉพาะแตละฟงกชนกราฟกมตวเลอกจำนวนมากในการสรางงานกราฟกทมความยดหยนมาก
วธทฟงกชนกราฟกทำงานนนเบยงเบนอยางมากจากแบบทรางไวในตอนตนของเอกสารน โดยเฉพาะผลของฟงกชนกราฟกไมสามารถถกกำหนดใหเปนออบเจกต11 แตวาจะถกสงไปท graphical device หนงคอวนโดวกราฟกหรอไฟลหนง
มฟงกชนกราฟกสองชนดคอ ฟงกชนการวาดระดบสง (high-level plotting functions)ซงสรางกราฟใหม และ ฟงกชนการวาดระดบตำ (low-level plotting functions) ซงเพมอลเมนทไปทกราฟทมอย กราฟถกสรางโดยเกยวของกบ พารามเตอรกราฟก (graphicalparameters) ซงถกกำหนดโดยคาปรยายและสามารถถกเปลยนแปลงไดดวยฟงกชน par
ในตอนตนเราจะไดเหนวาการจดการกราฟกและ graphical device ทำอยางไร และตอจากนนเราจะลงไปในรายละเอยดของฟงกชนกราฟกและพารามเตอร เราจะไดเหนตวอยางในทางปฏบตของการใชฟงกชนเหลานในการสรางกราฟ สดทายเราจะไดทราบถงแพกเกจgrid และ lattice ซงมฟงกชนทแตกตางจากฟงกชนทสรปไวกอนหนาน
4.1 การจดการกราฟก
4.1.1 การเปด graphical devices หลายสวน (several graphical devices)
เมอฟงกชนกราฟกถกดำเนนงาน ถาไมม graphical device ถกเปดแลว R จะเปดวนโดวกราฟกและแสดงกราฟนน graphical device อาจจะถกเปดดวยฟงกชนทเหมาะสม ราย-การของ graphical devices ทใชการไดขนอยกบระบบปฏบตการ วนโดวกราฟกถกใหชอวาX11 ภายใตระบบ Unix/Linux และ windows ภายใตระบบวนโดว ในทกกรณผใช Rสามารถเปดวนโดวกราฟก โดยคำสง x11() ซงใชงานไดเชนกนภายใตระบบวนโดว เนองจากเปนนามแฝงหนงทเกยวกบคำสง windows() graphical device ซงเปนไฟลหนงจะถกเปดดวยฟงกชนหนงทขนอยกบรปแบบดงตอไปนไดแก postscript(), pdf()และ png()เปนตน รายการของ graphical devices ทใชงานไดสามารถถกสบคนไดดวย
11มขอยกเวนทสำคญบางขอคอ hist() และ barplot() ใหผลออกมาเปนตวเลขเชนกนตามรายการหรอเมทรกซ
43
?device
device ทเปดสดทายกลายเปน graphical device ทใชไดอย (active) ซงกราฟทตามมาภายหลงทงหมดถกแสดงดวยฟงกชน dev.list() ทแสดงรายการของ open devices ดงตอไปน
> x11(); x11(); pdf()
> dev.list()
X11 X11 pdf
2 3 4
รปทถกแสดงคอจำนวนของ devices ซงตองถกใชเพอเปลยน active device เพอททราบวาอะไรคอ active device แสดงไดดงน
> dev.cur()
4
และเพอเปลยน active device แสดงดงน
> dev.set(3)
X11
3
ฟงกชน dev.off() ปด device หมายความวาโดยคาปรยาย active device ถกปด มฉะนนแลว active device ซงจำนวน (number) ถกกำหนดใหเปนอารกวเมนตไปทฟงกชนนน หลงจากนน R แสดงจำนวนของ active device ใหม ดงน
> dev.off(2)
X11
3
> dev.off()
4
ลกษณะเฉพาะสองอยางของเวอรชนวนโดว ของ R ซงควรคาตอการกลาวถงคอ WindowsMetafile device สามารถถกเปดดวยฟงกชน win.metafile และเมน “History” ถกแสดงเมอวนโดวกราฟกถกเลอกซงยอมใหบนทกกราฟทงหมดทถกวาดระหวางชด (session)หนง (โดยคาปรยาย ระบบการบนทกถกปด ผใชตองเปดมนขนมาโดยกดไปท “Recording”ในเมนน)
44
4.1.2 การแบงสวนของกราฟก (partitioning a graphic)
ฟงกชน split.screen แบงสวนของ active graphical device ตวอยางดงตอไปน
> split.screen(c(1, 2))
จากขางบนแบงภายใน device เปนสองสวนซงสามารถถกเลอกดวย screen(1) หรอscreen(2) และ erase.screen() ลบกราฟทถกวาดครงสดทาย สวนของ deviceสามารถถกแบงไดโดยตวมนเองโดย split.screen() ซงนำไปสความเปนไปไดททำ-ใหเกดการจดเรยงทมความซบซอน
ฟงกชนเหลานไมเขากบฟงกชนอน (ตวอยางเชน layout หรอ coplot) และตองไมถกใชกบ graphical devices หลายสวน การใชนควรเปนไปอยางจำกด ตวอยางเชน การสำรวจกราฟกของขอมล
ฟงกชน layout แบงวนโดวกราฟกท active เปนหลายสวนโดยทกราฟจะถกแสดงลำดบถดมา อารกวเมนตหลกของมนคอเมทรกซหนงกบจำนวนเตมทบงบอกถงจำนวนของ“sub-windows” ตวอยางดงตอไปนแสดงการแบง device ภายในออกเปนสสวนเทา ๆ กน
> layout(matrix(1:4, 2, 2))
เปนไปไดอยางแนนอนทจะสรางเมทรกซกอนหนานโดยการยอมใหเหนภาพไดดขนวาdevice ถกแบงไดอยางไรดงตวอยางตอไปน
> mat <- matrix(1:4, 2, 2)
> mat
[,1] [,2]
[1,] 1 3
[2,] 2 4
> layout(mat)
เพอทเหนภาพจรงทการแบงถกสรางขนมา ผใช R สามารถใชฟงกชน layout.show
กบจำนวนหนาตางยอย (sub-windows) เปนอารกวเมนต (ในทนคอ 4) ดงตวอยางตอไปน
> layout.show(4)1
2
3
4
ตวอยางดงตอไปนแสดงบางสวนของความเปนไปไดทฟงกชน layout() ทำได
45
> layout(matrix(1:6, 3, 2))
> layout.show(6)
1
2
3
4
5
6
> layout(matrix(1:6, 2, 3))
> layout.show(6)
1
2
3
4
5
6
> m <- matrix(c(1:3, 3), 2, 2)
> layout(m)
> layout.show(3)
1
2
3
ตวอยางเหลานทงหมดยง ไมไดใชตวเลอกคอ byrow ของ matrix() ดงนนหนา-ตางยอยขางตนมจำนวนแนวตงนบตามคอลมนลงมา (column-wise) โดยผใช R สามารถระบเพยง matrix(..., byrow=TRUE) เพอทวาหนาตางยอยถกนบตามแถว (row-wise) นอกจากนตวเลข ในเมทรกซอาจถกกำหนดใหเปน order ใดกได ตวอยางเชน matrix(c(2,
1, 4, 3), 2, 2)
โดยปรยาย ฟงกชน layout() แบง device ดวยความสงและความกวางทเปนปกตซงความสงและความกวางนสามารถถกปรบเปลยนไดดวยตวเลอก widths และ heightsมตเหลานถกกำหนดใหอยางสมพนธกน ดงตวอยางตอไปน12
> m <- matrix(1:4, 2, 2)
> layout(m, widths=c(1, 3),
heights=c(3, 1))
> layout.show(4)
1
2
3
4
> m <- matrix(c(1,1,2,1),2,2)
> layout(m, widths=c(2, 1),
heights=c(1, 2))
> layout.show(2)
1
2
สดทายจำนวนในเมทรกซสามารถรวมคา 0 ททำใหมความเปนไปไดในการแบงสวนของกราฟกใหดซบซอนยงขน (หรอแมกระทงเปน esoterical)
12สามารถกำหนดใหอยในหนวยเซนตเมตรได ด ?layout.
46
> m <- matrix(0:3, 2, 2)
> layout(m, c(1, 3), c(1, 3))
> layout.show(3)1
2
3
> m <- matrix(scan(), 5, 5)
1: 0 0 3 3 3 1 1 3 3 3
11: 0 0 3 3 3 0 2 2 0 5
21: 4 2 2 0 5
26:
Read 25 items
> layout(m)
> layout.show(5)
1
2
3
4
5
47
4.2 ฟงกชนกราฟก (graphical functions)
ตารางแสดงภาพรวมของฟงกชนกราฟกขนสงใน R
plot(x) พลอตกราฟของคา x (บนแกน y) ตามคาบนแกน x
plot(x, y) พลอตกราฟขอบสองตวแปรของคา x (บนแกน x) และ y (บนแกน y)sunflowerplot(x,
y)
เหมอนคำอธบายดานบน แตจดตามพกดคลายกนถกลากเหมอนดอกไมซงจำนวนกลบดอกแทนจำนวนจด
pie(x) กราฟแบบวงกลมboxplot(x) กราฟแบบ “box-and-whiskers”stripchart(x) พลอตของคา x บนเสน (อกทางเลอกสำหรบ boxplot() กรณขนาดตว-
อยางขนาดเลก)coplot(x˜y | z) พลอตกราฟของ x และ y สำหรบแตละคา (หรอชวงของคา) ของ zinteraction.plot
(f1, f2, y)
ถา f1 และ f2 เปนปจจย (factors) แลวพลอตคาเฉลยของ y (บนแกนy) ตามคาของ f1 (บนแกน x) และคาของ f2 (เสนโคงทตางกน) โดยทตวเลอก fun ใหเลอกสถตโดยสรปของ y (คาปรยายคอ fun=mean)
matplot(x,y) พลอตกราฟสองตวแปรของคอลมนแรกของ x กบคอลมนแรกของ y คอ-ลมนทสองของ x กบคอลมนทสองของ y ไปเรอย ๆ
dotchart(x) ถา x เปนกรอบขอมล พลอตกราฟ Cleveland dot (พลอตกราฟแบบตงขนแบบเสนตอเสนและคอลมนตอคอลมน)
fourfoldplot(x) ทำใหเหนเปนสสวนของวงกลมทสมพนธระหวางตวแปรสองประเภท(dichotomous variables) สำหรบประชากรทแตกตางกน (x ตองเปนอารเรยทม dim=c(2, 2, k) หรอเมทรกซทม dim=c(2, 2) ถาk = 1)
assocplot(x) กราฟ Cohen–Friendly ทแสดงสวนเบยงเบนจากความอสระของแถวและคอลมนในตารางแจกแจงสองมต
mosaicplot(x) กราฟ ‘mosaic’ ของ residuals จากการถดถอยเชง log-linear ของตารางแจกแจง
pairs(x) ถา x คอเมทรกซหรอกรอบขอมล วาดกราฟสองตวแปรทเปนไปไดทงหมดระหวางคอลมนของ x
plot.ts(x) ถา x คอออบเจกตของคลาส "ts" พลอตกราฟของ x ทแปรตามเวลา x
อาจเปนหลายตวแปรแตอนกรมตองมความถและเวลาเดยวกนts.plot(x) เหมอนคำอธบายดานบน แตถา x เปนหลายตวแปรแลวอนกรมอาจมเวลา
ตางกนไดและตองมความถเดยวกนhist(x) แผนภมแทงของความถของ xbarplot(x) แผนภมแทงของคา xqqnorm(x) ควอรไทลของ x ตามคาคาดหวงภายใตกฎปกตqqplot(x, y) ควอรไทลของ y ตามควอรไทลของ xcontour(x, y, z) พลอตกราฟทแสดงรปราง (ขอมลถกเพมการวาดเสนโคง) x และ y ตอง
เปนเวกเตอรและ z ตองเปนเมทรกซเพอวา dim(z)=c(length(x),
length(y)) (x และ y อาจถกละไว)filled.contour
(x, y, z)
เหมอนคำอธบายดานบน แตพนทระหวางเสนแสดงรปเปนสและสของคำอธบายกราฟถกวาดเชนกน
image(x, y, z) เหมอนคำอธบายดานบน แตขอมลจรงถกทำใหเปนตวแทนดวยส
48
persp(x, y, z) เหมอนคำอธบายดานบน แตในภาพรวมstars(x) ถา x เปนเมทรกซหรอกรอบขอมล วาดกราฟโดยแบงเปนสวนหรอเปนดาว
ทแตละแถวของ x ถกทำใหเปนตวแทนโดยดาวและคอลมนคอความยาวของสวนแบง
symbols(x, y,
...)
วาดทพกดทถกกำหนดใหโดย x และ yสญลกษณ (วงกลม สเหลยมจตรสสเหลยมผนผา ดาว ทวดอณหภม หรอ “boxplots”) ซงขนาด สและอนๆถกระบโดยอารกวเมนตเพมเตม
termplot(mod.obj) พลอตกราฟของผล (บางสวน) ของแบบจำลองการถดถอย (mod.obj)
สำหรบแตละฟงกชน ตวเลอกอาจถกสบคนไดดวย the on-line help ใน R บางสวนของตวเลอกเหลานเปนเหมอนกนกบฟงกชนกราฟกหลายฟงกชน ตอไปนจะเปนฟงกชนหลก (กบคาปรยายทเปนไปไดของฟงกชน)
add=FALSE ถาเปนจรง (TRUE) แลวกำหนดเหนอพลอตกราฟกอนหนาน (ถายงคงมอย)
axes=TRUE ถาเปนเทจ (FALSE) แลวไมวาดแกนและกลองtype="p" ระบชนดของพลอต "p" คอจด "l" คอเสน "b" คอจดทถก
เชอมตอโดยเสน "o" คอ คลาย "b" แตเสนอยเหนอจด "h":คอ เสนแนวตง "s" คอ ขนทขอมลถกเปนตวแทนโดยสวนบนสดของเสนแนวตง "S" คลาย "s" แตขอมลถกเปนตวแทนโดยสวนลางสดของเสนแนวตง
xlim=, ylim= ระบขดจำกดลางและขดจำกดบนของแกน ตวอยางเชนxlim=c(1, 10) หรอ xlim=range(x)
xlab=, ylab= อธบายแกน ตองเปนตวแปรของโหมดอกขระmain= ชอเรองหลก ตองเปนตวแปรโหมดอกขระsub= ชอเรองรอง (ถกเขยนในตวอกษรทเลกกวา)
4.3 คำสงการวาดระดบตำ
R มชดของฟงกชนกราฟกซงมผลตอกราฟทมอยแลว และถกใหชอวา คำสงการวาดระดบตำ (low-level plotting commands) ตารางตอไปนเปนชดคำสงหลกดงกลาว
points(x, y) เตมจด (ตวเลอก type= สามารถถกใชได)lines(x, y) เหมอนคำอธบายดานบนแตเปนการเพมเสนtext(x, y,
labels, ...)
เพมขอความทกำหนดโดยฟงกชน labels ทพกด (x,y) การใชแบบมาตร-ฐานคอ plot(x, y, type="n"); text(x, y, names)
49
mtext(text,
side=3, line=0,
...)
เพมขอความทกำหนดโดย ฟงกชน text ในขอบทถกระบโดย ฟงกชนside (ด axis() ขางลาง) และ ฟงกชน line ระบเสนจากพนทพลอตกราฟ
segments(x0,
y0, x1, y1)
ลากเสนจากจด (x0,y0) ไปทจด (x1,y1)
arrows(x0, y0,
x1, y1, angle=
30, code=2)
เหมอนคำอธบายดานบนโดยมลกศรทจด (x0,y0) ถา code=2 ทจด(x1,y1) ถา code=1 หรอทงคถา code=3 สวนฟงกชน angle ควบคมแกนของลกศรไปทขอบของหวลกศร
abline(a,b) วาดเสนของความชน b และมจดตดแกน a
abline(h=y) วาดเสนแนวนอนทพกดทสอง yabline(v=x) วาดเสนแนวตงทพกดทหนง xabline(lm.obj) วาดเสนการถดถอยทถกกำหนดโดย lm.obj (ดสวนท 5)rect(x1, y1, x2,
y2)
วาดสเหลยมผนผาซง ขดจำกดซาย ขวา ลางและบนคอ x1, x2, y1 และy2 ตามลำดบ
polygon(x, y) วาดรปหลายเหลยมซงเชอมจดดวยพกดทถกกำหนดโดย x และ ylegend(x, y,
legend)
เตมคำอธบายทจด (x,y) ดวยสญลกษณทถกกำหนดโดยฟงกชน legend
title() เตมชอเรองและโดยทางเลอกชอเรองยอยaxis(side,
vect)
เตมแกนทดานลาง (side=1) ทดานซาย (2) ทดานบนสด (3) หรอทดานขวา (4) โดยท vect เปนทางเลอกทใหพกดทหนงหรอพกดทสองเปนทวาดเครองหมายกำกบ (tick-marks)
box() เพมกลองรอบพลอตกราฟปจจบนrug(x) วาดขอมล x บนแกน x ใหเหมอนเสนแนวตงขนาดเลกlocator(n,
type="n", ...)
ไดผลเปนพกด (x, y) ภายหลงผใชไดกด n ครงบนพลอตดวยเมาส รวมถงวาดสญลกษณ (type="p") หรอ เสน (type="l") ตามพารามเตอรกราฟกทางเลอก (...) ซงโดยคาปรยายคอไมถกวาด (type="n")
ขอสงเกตคอความเปนไปไดทจะเพมนพจนทางคณตศาสตรบนการพลอตหนงดวย text(x,y, expression(...)) ทซงฟงกชน expression เปลยน (transform) อารกว-เมนตของมนเปนสมการทางคณตศาสตร ตวอยางเชน
> text(x, y, expression(p == over(1, 1+e^-(beta*x+alpha))))
จากตวอยางขางตนจะแสดงบนพลอตตามสมการดงตอไปนทจดใดจดหนงของพกด (x, y):
p =1
1 + e−(βx+α)
เพอทจะรวมตวแปรหนงในนพจนหนง เราสามารถใชฟงกชน substitute และas.expression ตวอยางเชน เพอรวมคาของ R2 (กอนหนานไดคำนวณและเกบไวในออบเจกตหนง มชอวา Rsquared) ดงตวอยางตอไปน
50
> text(x, y, as.expression(substitute(R^2==r, list(r=Rsquared))))
จากขางตนจะแสดงบนพลอตทจดใดจดหนงของพกด (x, y) ดงน
R2 = 0.9856298
เพอใหแสดงเพยงทศนยมสามตำแหนง เราสามารถเปลยนรหสไดตามตอไปน
> text(x, y, as.expression(substitute(R^2==r,
+ list(r=round(Rsquared, 3)))))
ซงจะแสดงดงน
R2 = 0.986
สดทายเพอทจะเขยนใน R เปนตวเอน (italics) ทำไดดงตอไปน
> text(x, y, as.expression(substitute(italic(R)^2==r,
+ list(r=round(Rsquared, 3)))))
R2 = 0.986
4.4 พารามเตอรกราฟก (graphical parameters)
นอกเหนอจากชดคำสงการวาดระดบตำแลว การนำเสนอของกราฟกสามารถทำใหดขนไดดวยพารามเตอรกราฟก พารามเตอรนสามารถถกใชดวยตวเลอกของฟงกชนกราฟก (แตมนทำงานไมไดทงหมด) หรอดวยฟงกชน par เพอเปลยนพารามเตอรกราฟกอยางถาวรเชน พลอตทภายหลงจะถกวาดตามแตทพารามเตอรทถกระบโดยผใช R เชน คำสงดงตอไปน
> par(bg="yellow")
จากขางตนจะไดผลทตามมาเปนการพลอตทถกวาดดวยพนหลงสเหลอง มพารามเตอรกราฟก 73 แบบ บางแบบของ พารามเตอรเหลานมฟงกชนทคลายกนมาก รายการทมาก-มายของพารามเตอรเหลานสามารถหาอานไดดวยฟงกชน ?par ซงตารางดงตอไปนผเขยนจะยกมาเฉพาะฟงกชนทใชเปนประจำมากทสด
adj ควบคมการจดแนวของขอความตามขอบซายของขอความโดยท 0 คอ การจดชดซาย 0.5 คอการจดตรงกลาง 1 คอการจดชดขวา สวนคา > 1 คอเคลอนขอความไปทางซายมากขนและคาลบหมายถงเคลอนขอความมาทางขวามากขน กรณทมสองคาถกกำหนดไว (เชน c(0, 0))คาทสองควบคมการจดแนวขอความตามแนวตงตามเสนฐานของของขอความ
51
bg ระบสของพน (เชน bg="red", bg="blue" สวนรายการของสทมได 657 สถกแสดงไดดวย colors())
bty ควบคมชนดของกลองทถกวาดรอบพลอต คาทใชไดมดงน "o", "l", "7", "c", "u","]" (กลองซงคลายลกษณะเปนตามสวน) ถา bty="n" แลวกลองไมถกวาด
cex คาทควบคมขนาดของขอความและสญลกษณตามคาโดยปรยาย ซงพารามเตอรดงตอไปนมการควบคมแบบเดยวกน สำหรบตวเลขบนแกนคอ cex.axis สำหรบการลงรายการบนแกนคอ cex.lab สำหรบชอเรองคอ cex.main และสำหรบชอเรองยอยคอ cex.sub
col ควบคมสของสญลกษณ ตามท cex ม ไดแก col.axis, col.lab, col.main และcol.sub
font จำนวนเตมซงควบคมรปแบบของขอความ (1 คอ 2 คอตวเอน 3 คอตวหนา และ 4 คอตวเอนทหนา) ตามท cex ม ไดแก font.axis, font.lab, font.main และ font.sub
las จำนวนเตมซงควบคมการจดวางของการลงรายการบนแกน (0 คอขนานกบแกน 1 คอตามแนวนอน 2 คอตามแนวตงฉากกบแกน และ 3 คอตามแนวตง)
lty ควบคมชนดของเสนทมคาเปนจำนวนเตม (1 คอเสนทบ 2 คอเสนประ 3 คอเสนจด 4 คอเสนจดประ 5 คอเสนประยาว 6 คอเสนประ 2 เสน) หรอเปนแถวไดถง 8 ลกษณะ (ระหวาง"0" และ "9") ซงระบความยาวเปนทางเลอก ในจดหรอจดภาพ (pixels) ของอลเมนททถกวาดและเปนทวาง ตวอยางเชน lty="44" จะมผลแบบเดยวกบ lty=2
lwd คาตวเลขซงควบคมความกวางของเสนmar เวกเตอรของคาตวเลข 4 คาซงควบคมทวางระหวางแกนและขอบของกราฟของแบบ
c(bottom, left, top, right) โดยทคาปรยาย c(5.1, 4.1, 4.1,
2.1)
mfcol เวกเตอรของแบบ c(nr,nc) ซงแบงหนาตางกราฟกคลายเมทรกซของ nr แถวและ nc
คอลมน และตามดวยพลอตถกวาดในแนวคอลมน (ดสวน 4.1.2)mfrow เหมอนคำอธบายขางบนแตตามดวยพลอตถกวาดในแนวแถว (ดสวน 4.1.2)pch ควบคมชนดของสญลกษณโดยไมเปนจำนวนเตมระหวาง 1 ถง 25 กเปนอกขระเดยวทอย
ภายในเครองหมาย "" (รปท 2)ps จำนวนเตมซงควบคมขนาดในจดของขอความและสญลกษณpty ลกษณะซงระบชนดของพนทการพลอต "s" คอสเหลยมจตรส "m" คอใหญสดtck คาซงระบความยาวของเครองหมายกำกบบนแกนตามเศษสวนของความกวางทเลกทสดหรอ
ความสงของพลอต โดย tck=1 ตาตาราง (grid) ถกวาดtcl เหมอนคำอธบายขางบนแตเศษสวนของความสงของเสนของขอความ (คาปรยาย tcl=-
0.5)xaxt ถา xaxt="n" แลวแกน x ถกจดวางแตไมถกวาด (มประโยชนในการเชอมดวย axis
axis(side=1, ...))yaxt ถา yaxt="n" แลวแกน y ถกจดวางแตไมถกวาด (มประโยชนในการเชอมดวย axis
axis(side=2, ...))
52
* ? X a
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 "*" "?" "." "X" "a"
รปท 2: สญลกษณการวาด ใน R (pch=1:25) สไดมาดวยตวเลอกเชนcol="blue", bg="yellow" ตวเลอกทสองมผลเฉพาะสญลกษณท 21–25ลกษณะใด ๆ กตามสามารถถกใชได (เชนpch="*", "?", ".", และอนๆ)
−0.5 0.0 0.5 1.0
−1.0
−0
.50.0
0.5
x
y
รปท 3: แสดงฟงกชน plot ทถกใชโดยไมใชตวเลอก
53
4.5 ตวอยางภาคปฏบต
เพอทจะแสดงการใชฟงกชนกราฟกใน R เรามาพจารณาตวอยางทงายของกราฟสองตวแปร(bivariate graph) ของ 10 คของตวแปรสม คาเหลานถกสรางไดดวยฟงกชนตอไปน
> x <- rnorm(10)
> y <- rnorm(10)
กราฟทตองการจะไดมาดวยฟงกชน plot() ซงผใช R จะพมพคำสงตอไปน
> plot(x, y)
และกราฟนจะถกพลอตบน active graphical device ซงผลทไดถกแสดงดงรปท 3โดยปรยาย R สรางกราฟในวธทฉลาด (“intelligent”) หมายความวา ชองวางระหวางเครอง-หมายกำกบ (tick-marks) บนแกน การวางตำแหนงของการลงรายการ (labels) และอน ๆถกคำนวณเพอวากราฟทแสดงผลเปนกราฟทเขาใจไดงายเทาทจะเปนไปได
อยางไรกตาม ผใช R อาจเปลยนวธการนำเสนอกราฟได ตวอยางเชน เพอใหสอด-คลองกบรปแบบ pre-defined editorial style หรอเพอใหกราฟแสดงออกมาเฉพาะตวสำ-หรบการบรรยาย วธทงายทสดทจะเปลยนการนำเสนอของกราฟคอการเพมตวเลอกซงจะเปลยนแปลงอารกวเมนตโดยปรยาย ในตวอยางตอไปเราจะเปลยนรปภาพอยางมนยสำคญในวธดงตอไปน
plot(x, y, xlab="Ten random values", ylab="Ten other values",
xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red",
bg="yellow", bty="l", tcl=0.4,
main="How to customize a plot with R", las=1, cex=1.5)
จากขางตนไดผลแสดงในรปท 4 ในทนจะกลาวโดยละเอยดในแตละตวเลอกทถกใชอยางแรก xlab และ ylab เปลยนการลงรายการของแกนจากทเปนคาปรยายเปนชอของตวแปร หลงจากนน xlim และ ylim ยอมใหสามารถกำหนด limits ของทงสองแกนพารามเตอรกราฟก13 pch ถกใชในทนเพอเปนตวเลอก หมายความวา pch=22 เปนการระบใหเปนรปสเหลยมซงมเสนแสดงของรปสเหลยมและสพนอาจแตกตางกนและตามทกำหนดใหตามลำดบโดยการใช col และ bg ตารางของพารามเตอรกราฟกไดใหความ-หมายของการเปลยนแปลงทถกกระทำโดย bty, tcl, las และ cex สดทายชอกราฟถกเพมโดยใชตวเลอก main
พารามเตอรกราฟกและฟงกชนการวาดระดบตำ ยอมใหผใชทำอะไรไดมากขนในการนำเสนอในรปแบบกราฟ ตามทผใชไดเหนแลวกอนหนาน พารามเตอรกราฟกบางพารามเตอร
13By default, R adds 4% on each side of the axis limit. This behaviour may be altered by settingthe graphical parameters xaxs="i" and yaxs="i" (they can be passed as options to plot()).
54
−2 −1 0 1 2
−2
−1
0
1
2
How to customize a plot with R
Ten random values
Ten o
the
r valu
es
รปท 4: ฟงกชน plot ทถกใชแบบมตวเลอก
ไมสามารถถกสงไปยงฟงกชนในฐานะอารกวเมนตได เชน ฟงกชน plot ถงตรงน จะเปลยนแปลงบางอยางของพารามเตอรเหลานดวย par() ดงนนมความจำเปนทตองพมพคำสงหลายคำสง เมอพารามเตอรกราฟกถกเปลยน จะเปนประโยชนหากทำการบนทกคาเรมตนของมนกอนเพอจะไดสามารถกกลบมาใชในภายหลงได ตอไปนเปนชดคำสงทถกใชเพอใหไดรปท 5.
opar <- par()
par(bg="lightyellow", col.axis="blue", mar=c(4, 4, 2.5, 0.25))
plot(x, y, xlab="Ten random values", ylab="Ten other values",
xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow",
bty="l", tcl=-.25, las=1, cex=1.5)
title("How to customize a plot with R (bis)", font.main=3, adj=1)
par(opar)
มาดในรายละเอยดผลของการกระทำจากชดคำสงเหลาน เรมจากพารามเตอรกราฟกทเปนคาปรยายถกคดลอกในรายการซงในทนเรยกวา opar หลงจากนนพารามเตอร 3 ตวถกเปลยนแปลง หมายความวา bg สำหรบสของพนหลง col.axis สของตวเลขทอยบนแกน และ mar สำหรบขนาดของขอบรอบพนท การพลอตกราฟนถกวาดในวธทเกอบคลายกบรปท 4 การเปลยนแปลงของกรอบยอมใหใชพนทวางรอบๆ พนทการพลอตได ในทนชอเรองถกเตมโดยใชฟงกชนการวาดระดบตำคอฟงกชน title ซงยอมใหบางพารา-มเตอรเปนอารกวเมนตโดยไมเปลยนแปลงบรเวณทเหลอของกราฟ สดทายคาพารามเตอรกราฟกเรมตนถกเกบดวยคำสงสดทาย
ณ ตอนน อยในการควบคมทงหมด ตามรปท 5 R ยงคงกำหนดบางอยาง เชน จำ-
55
−2 −1 0 1 2
−2
−1
0
1
2
Ten random values
Ten o
ther
valu
es
How to customize a plot with R (bis)
รปท 5: ฟงกชน par, plot และ title
นวนของเครองหมายกำกบ (tick marks) บนแกน หรอชองวางระหวางชอเรองและพนทการพลอต ในเวลานเราเขาใจแลววาทำอยางไรทจะควบคมทงหมดในการนำเสนอกราฟ ในทนวธการทถกใชเรมจากการพลอต กราฟทวาง (“blank” graph) ดวยคำสง plot(...,type="n") แลวตามดวยการเตมจด แกน การเขยนขอความลงรายการ และอน ๆ ดวยฟงกชนการวาดระดบตำ เราจะทำการปรบคาบางอยาง เชน การเปลยนสของพนทการพลอตโดยใชชดคำสงตอไปนและกราฟทไดจากชดคำสงนคอรปท 6
opar <- par()
par(bg="lightgray", mar=c(2.5, 1.5, 2.5, 0.25))
plot(x, y, type="n", xlab="", ylab="", xlim=c(-2, 2),
ylim=c(-2, 2), xaxt="n", yaxt="n")
rect(-3, -3, 3, 3, col="cornsilk")
points(x, y, pch=10, col="red", cex=2)
axis(side=1, c(-2, 0, 2), tcl=-0.2, labels=FALSE)
axis(side=2, -1:1, tcl=-0.2, labels=FALSE)
title("How to customize a plot with R (ter)",
font.main=4, adj=1, cex.main=1)
mtext("Ten random values", side=1, line=1, at=1, cex=0.9, font=3)
mtext("Ten other values", line=0.5, at=-1.8, cex=0.9, font=3)
mtext(c(-2, 0, 2), side=1, las=1, at=c(-2, 0, 2), line=0.3,
col="blue", cex=0.9)
mtext(-1:1, side=2, las=1, at=-1:1, line=0.2, col="blue", cex=0.9)
par(opar)
56
How to customize a plot with R (ter)
Ten random values
Ten other values
−2 0 2
−1
0
1
รปท 6: กราฟ “hand-made”
เชนเดยวกบกอนหนานพารามเตอรกราฟกทเปนคาปรยายถกบนทกไวและสของพนหลงและขอบถกเปลยนแปลง จากนนกราฟถกวาดดวย type="n" เพอทไมพลอตจด xlab="",ylab="" เพอทไมเขยนการลงรายการบนแกน และ xaxt="n", yaxt="n" เพอทไมวาดแกน ผลในการวาดนเปนเพยงกลองลอมรอบพนทการพลอตและการกำหนดแกนทใช xlim และ ylim ขอสงเกตคอนาจะใชตวเลอก axes=FALSE แตในกรณนทงแกนและกลองจะไมถกวาด
ตอมาอลเมนทถกเตมในพนทการพลอตซงถกกำหนดดวยฟงกชนการวาดระดบตำบางฟงกชน กอนการเตมจด สภายในพนทการพลอตถกเปลยนดวย rect() หมายความวาขนาดของสเหลยมถกเลอกเพอใหมขนาดใหญมากขนในพนทการพลอต
จดถกพลอตดวย points() ซงเปนสญลกษณใหมทถกใช แกนถกเตมดวย axis()หมายความวา เวกเตอรถกกำหนดใหเปนอารกวเมนตทสองซงเปนตวระบพกดของเครอง-หมายกำกบ ตวเลอก labels=FALSE ระบวาตองไมมคำอธบายประกอบถกเขยนกบเครองหมายกำกบ นอกจากนตวเลอกนยอมรบเวกเตอรของโหมดอกขระดวย ตวอยางเชนlabels=c("A", "B", "C")
ชอเรองถกเตมดวย title()แตตวอกษรถกเปลยนเลกนอย คำอธบายประกอบบนแกนถกเขยนดวย mtext() (marginal text) อารกวเมนตแรกสดของฟงกชนนคอเวก-เตอรของโหมดอกขระซงใหขอความทถกเขยนขน ตวเลอก line บงบอกถงระยะหางจากพนทการพลอต (โดยคาปรยาย line=0) และ at คอพกด สวนการเรยก mtext()
ครงทสองใชคาปรยายของ side (3) และ อกสอง mtext() ทเหลอคอการผานเวกเตอรตวเลขเปนอารกวเมนตแรกทจะถกเปลยนใหกลายเปนอกขระ
57
4.6 แพกเกจ grid และ lattice
แพกเกจ grid และ lattice ทำใหเกดผลกบระบบ grid และ lattice grid เปนโหมดกรา-ฟกรปแบบใหมพรอมดวยระบบของตวเองของพารามเตอรกราฟกซงแตกตางจากสงทเราไดเหนกอนหนาน ความแตกตางหลกสองประการของ grid เมอเปรยบเทยบกบกราฟก baseมดงน
• วธทยดหยนมากกวาเพอแยก graphical devices โดยการใช viewports ซงสามารถทบซอนกนได (ออบเจกตกราฟก อาจแมกระทงถกแบงสวนระหวาง viewports ทแตกตางกน เชน ลกศร)
• ออบเจกตกราฟก (grob) อาจถกเปลยนแปลงหรอเอาออกจากกราฟหนงโดยไมมความจำเปนทตองวาดกราฟทงหมดขนใหมอกครง (แตตองทำใหมกบกราฟก base)
Grid graphics ปกตแลวไมสามารถถกรวมหรอผสมกบกราฟก base ได (แพกเกจgridBase ตองถกใชเพอทำเรองน) อยางไรกตามมความเปนไปไดทจะใชโหมดกราฟกทงคใน session เดยวกนตาม graphical device เดยวกน
Lattice เปนสงทจำเปนในการนำไปใชใน R ของกราฟก Trellis ของ S-PLUS Trellisเปนการเขาถงรปแบบหนงเพอทำใหเกดภาพของขอมลหลายตวแปร ซงเหมะสมเปนอยางยงสำหรบการสำรวจความสมพนธหรอปฏสมพนธระหวางตวแปร14 แนวคดหลกเบองหลงlattice (และรวมถง Trellis) คอ conditional multiple graphs กลาวคอ กราฟสองตวแปรจะถกแยกออกเปนหลายกราฟทเกยวของกบคาของตวแปรทสาม ฟงกชน coplot ใชในแนวทางคลายกน แต lattice ใหชวงของการทำงานทกวางกวามาก lattice ใชโหมดกราฟกแบบตาราง (grid graphical mode)
ฟงกชนสวนใหญใน lattice มสตรทเปนอารกวเมนตหลกของมน เชน y ˜ x 15 สตรy ˜ x | z หมายถงกราฟของ y ทเกยวของกบ x จะถกพลอตเปนหลายกราฟซงเกยว-ของกบคาของ z
ตารางตอไปนแสดงถงฟงกชนหลกใน lattice สตรทกำหนดใหเปนอารกวเมนตทเปนสตรทจำเปนโดยทวไป แตฟงกชนเหลานยอมรบสตรแบบเงอนไข (y ˜ x | z) วาเปนอารกวเมนตหลก ซงในกรณหลงกราฟพหคณ (multiple graph) ทเกยวของกบคาของ z
ถกพลอตตามตวอยางขางลางน
14http://cm.bell-labs.com/cm/ms/departments/sia/project/trellis/index.html15plot()ยอมรบสตรเชนกนตามอารกวเมนตหลก หมายความวา ถา x และ y คอเวกเตอรสองเวกเตอร
ของความยาวเดยวกนแลว plot(y ˜ x) และ plot(x, y) จะใหกราฟทเหมอนกน
58
barchart(y ˜ x) แผนภมแทงของคา y ตามคาของ xbwplot(y ˜ x) พลอตแบบ “box-and-whiskers”densityplot(˜ x) พลอต density functionsdotplot(y ˜ x) พลอต Cleveland dot (พลอตแบบตง เสนตอเสน และคอลมนตอ
คอลมน)histogram(˜ x) แผนภมแทงของความถ xqqmath(˜ x) ควอรไทลของ x ตามคาทคาดหมายภายใตการกระจายตามทฤษฎstripplot(y ˜ x) พลอตหนงมต โดย x ตองเปนตวเลข y อาจเปนปจจย (factor)qq(y ˜ x) ควอรไทลทเปรยบเทยบสองการกระจาย โดย x ตองเปนตวเลข y
อาจเปนตวเลข อกขระหรอ factor กไดแตตองมสอง ‘levels’xyplot(y ˜ x) พลอตสองตวแปร (กบฟงกชนมากมาย)levelplot(z ˜ x*y)
contourplot(z ˜ x*y)
พลอตสของคาของ z ทพกดทกำหนดใหโดย x และ y (x, y และcodez ทงหมดมความยาวเดยวกน)
cloud(z ˜ x*y) พลอตภาพรวมแบบ 3-D (จด)wireframe(z ˜ x*y) พลอตภาพรวมแบบ 3-D (ผว)splom(˜ x) เมทรกซของพลอตสองตวแปรparallel(˜ x) พลอตพกดทขนานกน
ตอนนเรามาทำความเขาใจตวอยางบางตวอยางเพอทจะอธบายประกอบในแงมมบางอยางของแพกเกจ lattice แพกเกจนตองถกใสเขาในไปความจำดวยคำสง library(lattice)เพอใหฟงกชนสามารถถกเขาถงได
เรมตนดวยกราฟของฟงกชนความหนาแนน กราฟนสามารถถกทำไดโดยงายดวย densityplot(˜x) ซงจะพลอตสวนโคงของฟงกชนความหนาแนนทไดจากการสงเกต (empirical densityfunction) ดวยจดทตรงกบการสงเกตบนแกน x (คลายกบ rug()) ตวอยางนยากกวาปก-ตเลกนอยเนองดวยมการซอนในแตละพลอตของเสนโคงของความหนาแนนทไดจากการสง-เกตและคาทเกดจากการคาดการณจากกฎปกต (normal law) จงมความจำเปนทตองใชอารกวเมนต panel ซงกำหนดสงทถกวาดในแตละพลอต ตอไปนคอชดคำสง
n <- seq(5, 45, 5)
x <- rnorm(sum(n))
y <- factor(rep(n, n), labels=paste("n =", n))
densityplot(~ x | y,
panel = function(x, ...) {
panel.densityplot(x, col="DarkOliveGreen", ...)
panel.mathdensity(dmath=dnorm,
args=list(mean=mean(x), sd=sd(x)),
col="darkblue")
})
สามบรรทดแรกของคำสงสรางตวอยางสมของตวแปรปกตอสระ ซงถกแยกในตวอยางยอยของขนาดเทากบ 5, 10, 15, . . . , และ 45 หลงจากนนในสวนของการเรยก densityplot
59
x
De
nsity
0
0.1
0.2
0.3
0.4
0.5
0.6
−4 −2 0 2 4
n = 5 n = 10
−4 −2 0 2 4
n = 15
n = 20 n = 25
0
0.1
0.2
0.3
0.4
0.5
0.6
n = 30
0
0.1
0.2
0.3
0.4
0.5
0.6
n = 35 n = 40
−4 −2 0 2 4
n = 45
รปท 7: ฟงกชน densityplot
จะทำการสรางพลอตหนงพลอตเพอแตละตวอยางยอย panel ใชอารกวเมนตเปนฟงกชนในตวอยางนไดกำหนดฟงกชนหนงซงเรยกอก 2 ฟงกชนซงฟงกชนนยามกอนในแพกเกจlattice panel.densityplot เปนฟงกชนความหนาแนนทวาดจากขอมลจรง สวนpanel.mathdensity เปนฟงกชนความหนาแนนทไดจากการคาดการณจากเกณฑมาตรฐาน ฟงกชน panel.densityplot ถกใหชอวา panel โดยคาปรยายถาไมถกกำหนดโดยอารกวเมนต หมายความวา คำสง densityplot (˜ x | y) จะใหผลลพธเปนกราฟเชนเดยวกบรปท 7 แตไมมเสนโคงสนำเงน
ตวอยางถดไปถกดดแปลงไมมากกนอยจาก help pages ของแพกเกจ lattice และชดขอมลบางชดหาไดใน R โดยเปนชดขอมลของทตงของเหตการณทเกยวของกบแผนดนไหว(seismic) ใกลหมเกาะฟจและทำการวดดอกไมบางลกษณะของพชไอรส (iris) สามชนด
รปท 8 แสดงทตงทางภมศาสตรของเหตการณทเกดแผนดนไหว seismic โดยพจาร-ณาตามความลก ชดคำสงทจำเปนสำหรบกราฟนมดงตอไปน
data(quakes)
mini <- min(quakes$depth)
maxi <- max(quakes$depth)
int <- ceiling((maxi - mini)/9)
inf <- seq(mini, maxi, int)
quakes$depth.cat <- factor(floor(((quakes$depth - mini) / int)),
labels=paste(inf, inf + int, sep="-"))
xyplot(lat ~ long | depth.cat, data = quakes)
คำสงแรกโหลดขอมล quakes เขามาในหนวยความจำ จากนนคำสงหาชดถดมาสราง
60
long
lat
−40
−35
−30
−25
−20
−15
−10
165 170 175 180 185
40−112 112−184
165 170 175 180 185
184−256
256−328 328−400
−40
−35
−30
−25
−20
−15
−10
400−472−40
−35
−30
−25
−20
−15
−10
472−544 544−616
165 170 175 180 185
616−688
รปท 8: ฟงกชน xyplot กบขอมล “quakes”
factor หนงโดยการแบงความลก (ตวแปร depth) ใหมการจดแนวทเทากนเกาชวง หมาย-ความวา ระดบของ factor นถกลงรายการดวยคาขอบเขตตำและคาขอบเขตสงของชวงเหลาน หลงจากนนจงเพยงพอทจะเรยกฟงกชน xyplot กบสตรทเหมาะสมและอารกวเมนตdata ซงบงบอกถงตำแหนงท xyplot จำเปนในการหาตวแปร16
ดวยขอมล iris ความซอนกนระหวางสปชสทแตกตางกนเลกนอยทมากพอสามารถถกวาดไดดงรปท 9) โดยชดคำสงมดงตอไปน
data(iris)
xyplot(
Petal.Length ~ Petal.Width, data = iris, groups=Species,
panel = panel.superpose,
type = c("p", "smooth"), span=.75,
auto.key = list(x = 0.15, y = 0.85)
)
การเรยกฟงกชน xyplot ในตวอยางนมความซบซอนมากกวาตวอยางกอนหนานเลกนอยและใชตวเลอกไดหลากหลายซงสามารถใหรายละเอยดดงน ตวเลอก groups โดยตามชอของมนเปนการนยามกลมทถกใชโดยตวเลอกอน จะเหนไดวาตวเลอก panel ซงนยามกลมทแตกตางกนจะถกแทนบนกราฟไดอยางไร ซงอธบายไดวา ในทนไดใชฟงกชนทเปน pre-defined คอ panel.superpose เพอทจะจดกลมแบบตอยอดในพลอตเดยวกน ไมมตวเลอกถกผานไปท panel.superpose ดวยสตาง ๆ โดยปรยายถก
16plot() ไมสามารถมอารกวเมนต data ได ตำแหนงของตวแปรตองถกกำหนดใหอยางชดเจน ตวอยางเชน plot(quakes$long ˜ quakes$lat)
61
Petal.Width
Pe
tal.L
eng
thooo
oo
o
ooo
o oo
o
oo
o
oo
o
o
o
o
o
o
o
o ooo
oooo
oo
oo
oo
o
ooo
o
o
o
o
ooo
o
o
o
o
oo
o
o
o
o
o
o
o
o
o
oo
o
o
o
o
o
o
o
oo
o
o
o
o
oo
o
o
o o
o
o
oo
o
o
o
o
oo oo
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
oo
o
o
o
o
o
o
o
o
o
o
o
oo
o
o
o
o
o
o
o
o
oo
o
o
o
oo
o
o
o
o
o
o
o
1
2
3
4
5
6
7
0 0.5 1 1.5 2 2.5
setosa
versicolor
virginica
รปท 9: ฟงกชน xyplot กบขอมล “iris”
ใชเพอแยกกลมตาง ๆ ตอมาตวเลอก type คลายใน plot() เปนการระบวาขอมลถกเปนตวแทนไดอยางไร แตในทนสามารถใหอารกวเมนตทหลากหลายเปนเวกเตอรหนงอธบายไดวา "p" ใชวาดจดตางๆ และ "smooth" เพอวาดเสนโคงทเรยบ ซงระดบของความเรยบถกระบโดย span หลงจากนนตวเลอก auto.key เตมคำอธบายสญลกษณ(legend) ไปทกราฟน ซงมความจำเปนเพยงเพอแสดงรายการเกยวกบพกดทคำอธบายสญ-ลกษณถกวาดขน ขอสงเกตในทนคอ พกดมความสมพนธกบขนาดของพลอต (เชน ในตำแหนง [0,1])
ในทนจะไดเหนฟงกชน splom กบขอมล iris เดยวกน ซงชดคำสงตอไปนถกใชในการสรางรปท 10:
splom(
~iris[1:4], groups = Species, data = iris, xlab = "",
panel = panel.superpose,
auto.key = list(columns = 3)
)
อารกวเมนตหลกในตอนนเปน เมทรกซหนง (คอลมนสคอลมนแรกของขอมล iris)ผลทไดคอ ชดของการพลอตของตวแปรสองตวทเปนไปไดระหวางคอลมนของเมทรกซน ซงคลายกบฟงกชนมาตรฐาน pairs โดยคาปรยาย splom เตมขอความ “Scatter PlotMatrix” ใตแกน x ดงนน เพอหลกเลยงขอความน xlab="" เปนตวเลอกทถกใช ตวเลอกอน ๆ มความคลายกนตามตวอยางกอนหนานยกเวน columns = 3 สำหรบauto.key ถกระบดงนนคำอธบายสญลกษณถกแสดงในคอลมนสามคอลมน
รปท 10 อาจถกสรางไดโดยใชฟงกชน pairs() แตฟงกชนนในลำดบถดมาไมสา-มารถสรางกราฟโดยมเงอนไขคลายกบรปท 11 ได ตอไปนเปนโคดทถกใชในการสราง
62
Sepal.Length
5
5
6
6
7
78
8
oo
ooo
o
oo
o
o
o
oo
o
o oo
o
o
oo
o
o
oo
o ooo
oo
ooo
oo
o
o
o
oo
o o
o oo
o
o
oo
o
o
o
o
o
o
o
o
o
oo
oo o
o
o
oo
o
oo
oo
ooo
o o
oo
oooo
o
o
oo
ooo
oo
o
o oo
o
o
o
o
o
o
oo
o
o
o
o
o
ooo
o o
oo
oo
o
o
o
o
oo
o
o oo
oo
o
ooo
o
ooo
ooo
o
oooo
oo
o
oooooo
oo
o
o
o
oo
o
oooo
o
oo
o
o
oo
oooo
oo
ooo
oo
o
o
o
oo
oo
oooo
o
oo
o
o
o
o
o
o
o
o
o
oo
ooo
o
o
oo
o
oo
oo
ooo
oo
ooooo
o
o
o
oo
ooo
oo
o
ooo
o
o
o
o
o
o
oo
o
o
o
o
o
ooo
oo
oo
oo
o
o
o
o
oo
o
ooo
oo
o
ooo
o
ooo
oo
o
o
oooooo
o
ooooo
o
oo
o
o
o
oo
o
o oo
o
o
oo
o
o
ooo ooo
oo
ooo
oo
o
o
o
oo
oo
ooo
o
o
oo
o
o
o
o
o
o
o
o
o
oo
oo o
o
o
oo
o
oo
oo
oooo o
ooooo
o
o
o
oo
ooo
oo
o
ooo
o
o
o
o
o
o
oo
o
o
o
o
o
ooo
o o
oo
oo
o
o
o
o
oo
o
ooo
oo
o
ooo
o
ooo
oo
o
o
o oooo
oo
o
ooo
o
o
o o
oo
o
o
oo
o
o
o
o
oo
o
oo
oo
o
ooooo
o
o o
oo
oo
o
oo
o
o
o
o
o
o
o
o
o oo o
o
oo
o
o
oo
o
o
o
oooo
o
o
o
o
o
o
o ooo
oo
ooo
oo
o
o
o
o
o
oo
o
o
o
o
oo o
o
o
o
o
ooo o
o
o
o
o
o
o
o
o
o
oo
o
o
o
o
o oo
o o
oo
oo
o
o
ooo
o
o
oo ooo
o
oo
o
o
o
o
oSepal.Width
22
2.5
2.5
3
3
3.5
3.5
4
44.5
4.5
o
ooo
o
o
oo
oo
o
o
oo
o
o
o
o
oo
o
oo
oo
o
ooooo
o
oo
oo
oo
o
oo
o
o
o
o
o
o
o
o
o ooo
o
oo
o
o
oo
o
o
o
oooo
o
o
o
o
o
o
oooooo
ooo
o o
o
o
o
o
o
oo
o
o
o
o
ooo
o
o
o
o
ooo o
o
o
o
o
o
o
o
o
o
oo
o
o
o
o
o oo
oo
oo
ooo
o
ooo
o
o
oo ooo
o
oo
o
o
o
o
o
o
ooo
o
o
oo
oo
o
o
oo
o
o
o
o
oo
o
oo
oo
o
ooooo
o
oo
oo
oo
o
oo
o
o
o
o
o
o
o
o
o ooo
o
oo
o
o
oo
o
o
o
oooo
o
o
o
o
o
o
oooo
oo
ooo
o o
o
o
o
o
o
oo
o
o
o
o
ooo
o
o
o
o
oo oo
o
o
o
o
o
o
o
o
o
oo
o
o
o
o
ooo
oo
oo
oo
o
o
ooo
o
o
oo o oo
o
o o
o
o
o
o
o
oooo oo
o oo o oooo o
ooooo oo
ooo
oooooo oo ooo ooo oooooo
o oo oo
ooo
ooo o
o
oo
ooo
o
o
ooo
oo
o
o
oooo
ooo
ooo o
oo o o
ooo
o oo
o
ooo o
o
o
o
o
ooo
o
o
oo
o
ooo
oooo
oo
oo
o
o
o
oo
ooo o
oo
oo
oo
ooo
oooo
oooooo
o
oo oo oo
ooo o oooo o
oooooo o
ooo
o ooooo o oooo ooo ooo o
oo
o oo oo
ooo
ooo o
o
oo
ooo
o
o
ooo
oo
o
o
o ooo
o oo
ooo o
oo oo
ooo
o oo
o
o ooo
o
o
o
o
ooo
o
o
oo
o
oo oo o oo
oo
oo
o
o
o
oo
o oo oo
o
oo
oo
ooooooo
oooo o oo
Petal.Length
11
2
2
3
3
4
4
4
4
5
5
6
67 7
oooooo
ooooooooo
oooooo o
ooo
o ooooo ooooooooooooo
oooooo
ooo
ooo o
o
oo
ooo
o
o
ooo
oo
o
o
ooooo oo
ooo o
oooo
ooo
o oo
o
oooo
o
o
o
o
oo o
o
o
oo
o
oo oo ooo
oo
oo
o
o
o
oo
oooo
oo
oo
oooo
oo o
oo
o oooo o
o
oooo ooo oo o oooo o
ooo oo oo
o
o
ooo
ooooo
o ooo ooo oooo
ooo oo oo
oo oo
oo
o
o
oo
o
o
o
oo oo
o
o
o
o
oo
o ooo
oo
oooo
oo o ooooo
oo
o
ooo oo
o
o
oo
o
o o
o oo
o
oooo
o o
o
oo
o
o
o oo
o
ooo
o
o
o oo
oo
oo
oo
o
oo
o
ooo
oo
o
o
oo oo ooooo o oooo o
ooo oooo
o
o
ooooooo
o
oooo ooo ooo o
ooo oo oo
oooo
oo
o
o
oo
o
o
o
oo oo
o
o
o
o
oo
oooo
oo
oooo
o o ooo ooo
oo
o
o oooo
o
o
oo
o
oo
o oo
o
oooo
o o
o
oo
o
o
ooo
o
oo o
o
o
o oo
oo
o o
oo
o
oo
o
oo
o
o o
o
o
ooooooooooooooo
ooooooo
o
o
oooooooo
ooooooooooo
ooooooo
oooo
oo
o
o
oo
o
o
o
oo oo
o
o
o
o
oo
oooo
oo
oooo
ooooooooo
oo
oooooo
o
oo
o
o o
o oo
o
oooo
oo
o
oo
o
o
o oo
o
ooo
o
o
ooo
o o
oo
oo
o
oo
o
oo
o
oo
o
o
Petal.Width
00
0.5
0.5
1
1
1.5
1.5
2
22.5 2.5
Setosa Versicolor Virginica
รปท 10: ฟงกชน splom กบขอมล “iris” (1)
กราฟนซงคอนขางงาย
splom(~iris[1:3] | Species, data = iris, pscales = 0,
varnames = c("Sepal\nLength", "Sepal\nWidth", "Petal\nLength"))
เนองจากกราฟยอยซงอยในกราฟนมขนาดคอนขางเลก จงไดเพมสองตวเลอกเพอใหรปนมความงายมากขนในการอานดงน pscales = 0 เอาเครองหมายกำกบบนแกนออก (กราฟยอยทงหมดถกวาดดวยอตราสวนเหมอนกน) และชอของตวแปรถกกำหนดอกครงเพอแสดงคาของพวกมนเปนสองบรรทด ("\n" เปนรหสเพอการแบงแถวในสายอก-ขระ (character string) หนง ๆ
ตวอยางสดทายใชวธการของพกดแบบขนาน เพอการวเคราะหเชงสำรวจ (exploratoryanalysis) ของขอมลหลายตวแปร ตวแปรเหลานถกกำหนดอยบนแกนหนง (เชน แกน y)และคาทสงเกตไดถกวาดบนอกแกนหนง (ตวแปรเหลานถกวดคลายกน เชน การทำตวแปรเหลานใหไดมาตรฐาน) คาทแตกตางกนของตวเดยวกนถกเชอมดวยเสนเสนหนง รหสตอไปนเปนรหสทใชสรางรปท 12 โดยใชขอมล iris
parallel(~iris[, 1:4] | Species, data = iris, layout = c(3, 1))
63
Scatter Plot Matrix
Sepal
Length
Sepal
Width
Petal
Length
setosa
Sepal
Length
Sepal
Width
Petal
Length
versicolor
Sepal
Length
Sepal
Width
Petal
Length
virginica
รปท 11: ฟงกชน splom กบขอมล “iris” (2)
Sepal.Length
Sepal.Width
Petal.Length
Petal.Width
Min Max
setosa versicolor
Min Max
Min Max
virginica
รปท 12: ฟงกชน parallel กบขอมล “iris”
64
5 การวเคราะหทางสถตดวย R
นอกจากกราฟกแลว ในทนเปนไปไมไดทจะลงรายละเอยดของความเปนไปไดทนำเสนอโดยR ทเกยวกบการวเคราะหทางสถต เปาหมายของผเขยนในทนเพอใหหลกสำคญบางประ-การพรอมจดมงหมายในการไดแนวคดของลกษณะของ R ทใชแสดงการวเคราะหขอมล
แพกเกจ stats ประกอบดวยกลมฟงกชนมากมายของการวเคราะหสถตพนฐาน ได-แก การทดสอบแบบดงเดม (classical tests) ตวแบบเชงเสน (linear models) ซงรวมถงการถดถอยแบบกำลงสองนอยสด (least-squares regression) ตวแบบเชงเสนนยทวไป(generalized linear models) และการวเคราะหความแปรปรวน (analysis of variance)การแจกแจง (distributions) คาทางสถตโดยสรป (summary statistics) การจดกลมแบบลำดบชน (hierarchical clustering) การวเคราะหอนกรมเวลา (time-series analysis) กำ-ลงสองนอยทสดแบบไมเปนเชงเสน (nonlinear least squares) และการวเคราะหหลายตวแปร (multivariate analysis) สวนวธทางสถตอน ๆ หาไดในแพกเกจทมเปนจำนวนมากใน R บางแพกเกจมใหแลวในการตดตงพนฐานของโปรแกรม R และถกแสดงขอความวา แนะนำ (recommended) และมแพกเกจอน ๆ อกมากมายทเปนแพกเกจ สนบสนน(contributed) และจำเปนตองไดรบการตดตงโดยผใช
โดยจะเรมดวยตวอยางทงายซงไมตองการแพกเกจใด ๆ นอกเหนอจาก stats เเพอทจะแนะนำการนำไปสการวเคราะหขอมลโดยทวไปใน R หลงจากนนจะลงในรายละเอยดของความรบางประการ สตร (formulae) และ ฟงกชนทวไป (generic functions) ซงเปนประ-โยชนทงสน ไมวาจะดำเนนการวเคราะหโดยวธใดกตาม และสดทายเราจะสรปดวยภาพรวมของแพกเกจ
5.1 ตวอยางอยางงายของการวเคราะหความแปรปรวน
ฟงกชนเพอการวเคราะหความแปรปรวนในแพกเกจ stats คอ aov เพอทจะลองทำตว-อยางน ใหเอาชดขอมลทมอยแลวใน R คอ InsectSprays ชดขอมลนเปนการทด-สอบยาฆาแมลง 6 ชนดในภาคสนาม ตวแปรตาม (observed response) คอ จำนวนของแมลงซงยาฆาแมลงแตละชนดถกทดสอบ 12 ครง ดงนนมขอมลทไดจากการสงเกต72 ชด ในทนจะไมพจารณาสำรวจดขอมลทางกราฟกแตจะเนนไปทการวเคราะหความแปร-ปรวนอยางงายของการตอบสนองของแมลงตอยาฆาแมลง ภายหลงจากการใสขอมลลงไปในหนวยความจำดวยฟงกชน data การวเคราะหถกดำเนนการภายหลงการแปลงเปนคารากทสอง (square-root transformation) ของตวแปรตามดงตอไปน
> data(InsectSprays)
65
> aov.spray <- aov(sqrt(count) ~ spray, data = InsectSprays)
อารกวเมนตหลก (และจำเปน) ของ aov คอสตรหนงทระบตวแปรตามทางดานซายมอของสญลกษณตวหนอน ˜ และตวแปรพยากรณ (predictor) ทางดานขวามอ สวนตวเลอกdata = InsectSprays ระบวาตวแปรจำตองถกพบในกรอบขอมล (data frame)InsectSprays วากยสมพนธน (syntax) ทเทาเทยมกนมดงตอไปน
> aov.spray <- aov(sqrt(InsectSprays$count) ~ InsectSprays$spray)
หรอ syntax เหมอนดงตวอยางตอไปนกได ถาทราบจำนวนคอลมนของตวแปร
> aov.spray <- aov(sqrt(InsectSprays[, 1]) ~ InsectSprays[, 2])
syntax แรกถกเลอกใชมากกวาเนองจากมนมความชดเจนมากกวา
ผลทไดเหลานไมถกแสดงเนองจากถกกำหนดใหเปนออบเจกตหนงทเรยกวา aov.sprayซงจะถกนำไปใชในบางฟงกชน เพอแยกผลเหลานออกมาในลำดบถดไป ตวอยางเชน ฟงก-ชน print เพอแสดงสรปโดยยอของการวเคราะห (สวนใหญเปนคาพารามเตอรทถกประ-มาณคา) และ summary เพอแสดงรายละเอยดทมากขน (รวมถงการทดสอบทางสถต) ดงตวอยางตอไปน
> aov.spray
Call:
aov(formula = sqrt(count) ~ spray, data = InsectSprays)
Terms:
spray Residuals
Sum of Squares 88.43787 26.05798
Deg. of Freedom 5 66
Residual standard error: 0.6283453
Estimated effects may be unbalanced
> summary(aov.spray)
Df Sum Sq Mean Sq F value Pr(>F)
spray 5 88.438 17.688 44.799 < 2.2e-16 ***
Residuals 66 26.058 0.395
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
อาจเตอนความจำดวยการพมพชอของออบเจกตเปนคำสงหนงทคลายกบคำสง print(aov.spray)ได โดยการแสดงทางกราฟกของผลสามารถถกทำไดโดย plot() หรอ termplot()
66
กอนการพมพ plot(aov.spray) จะแบงกราฟกภายในเปนสสวนเพอวาพลอตทว-เคราะหทงสสวนนจะถกดำเนนการบนกราฟเดยวกน ตอไปนคอชดคำสงดงกลาว
> opar <- par()
> par(mfcol = c(2, 2))
> plot(aov.spray)
> par(opar)
> termplot(aov.spray, se=TRUE, partial.resid=TRUE, rug=TRUE)
และกราฟกของผลเหลานอยในรปท 13 และ 14
1.5 2.5 3.5
−1
.50.0
1.0
Fitted values
Resid
ua
ls
Residuals vs Fitted
27 39
25
−2 −1 0 1 2
−2
01
2
Theoretical Quantiles
Sta
nda
rdiz
ed r
esid
ua
ls Normal Q−Q plot
2739
25
1.5 2.5 3.5
0.0
0.5
1.0
1.5
Fitted valuesS
tan
da
rdiz
ed
resid
ua
ls Scale−Location plot27 3925
0 20 40 60
0.0
00.0
40.0
8
Obs. number
Cook’s
dis
tance
Cook’s distance plot27
3925
รปท 13: การแสดงทางกราฟกของผลจากฟงกชน aov ดวย plot()
5.2 สตร (formulae)
สตรเปนอลเมนท (element) ทสำคญอยางหนงในการวเคราะหทางสถตดวย R โดยคำอธ-บายทถกใชเปนเหมอนกนหรอเกอบเหมอนกนสำหรบทงหมดของฟงกชน โดยทวไปสตรหนงเปนของรปแบบ y ˜ model ซง y เปนตวแปรตามทถกวเคราะห และ model
เปนชดของเงอนไขสำหรบคาพารามเตอรบางคาถกประมาณคา เงอนไขเหลานถกแยกดวยสญลกษณคำนวณ แตสญลกษณเหลานมความหมายเฉพาะดงตอไปน
67
0 1 2 3 4 5 6−
3−
2−
10
12
spray
Part
ial fo
r spra
y
รปท 14: การแสดงทางกราฟกของผลจากฟงกชน aov ดวย termplot()
a+b ผลแบบรวมกน (additive effects) ของ a และ bX ถา X คอเมทรกซหนงแลวสงนระบผลการบวกของคอลมนของมน
ตวอยางเชน X[,1]+X[,2]+...+X[,ncol(X)] ในบางกรณคอลมนอาจถกเลอกดวยดชนตวเลข ตวอยางเชน X[,2:4]
a:b ผลแบบมปฏสมพนธกน (interactive effects) ระหวาง a และ ba*b ผลทงแบบรวมกนและมปฏสมพนธกน (เทากบ a+b+a:b)poly(a, n) พหนาม (polynomials) ของ a ถงดกร nˆn หมายรวมถงปฏสมพนธทงหมดจนถงระดบ n ตวอยางเชน
(a+b+c)ˆ2 ไดผลเทากบ a+b+c+a:b+a:c+b:c
b %in% a ผลของ b ถกซอนอยใน a (ไดผลเทากบ a+a:b หรอ a/b)-b เอาผลของ b ออก ตวอยางเชน (a+b+c)ˆ2-a:b ไดผลเทากบ
a+b+c+a:c+b:c
-1 y˜x-1 คอสมการถดถอยผานจดกำเนด (เหมอนกบ y˜x+0 หรอ0+y˜x)
1 y˜1 ทเหมาะกบตวแบบ (model) โดยไมมผลใด ๆ มเพยงแตจดตด (intercept)
offset(...) เพมผลไปทตวแบบโดยไมมการประมาณคาพารามเตอรใด ๆ ตว-อยางเชน offset(3*x)
เราจะเหนไดวาตวดำเนนการเลขคณต (arithmetic operators) ของ R มความหมายทตางกนมากกวาทมในนพจน (expressions) ตวอยางเชน จากสตร y˜x1+x2 กำหนดตวแบบ y = β1x1+β2x2+α ไมใช y = β(x1+x2)+α (แมวาตวดำเนนการ + จะมความ-
68
หมายตามเครองหมายของมนเอง) เพอรวมการดำเนนการเลขคณตในสตร เราสามารถใชฟงกชน I โดยสตร y˜I(x1+x2) กำหนดตวแบบ y = β(x1 + x2) + α ในทำนองเดยวกนนนเพอกำหนดตวแบบเปน y = β1x+ β2x
2 + α เราจะใชสตร y ˜ poly(x,
2) (แตไมใช y ˜ x + xˆ2) อยางไรกตาม เปนไปไดทจะรวมฟงกชนหนงในสตรเพอทจะแปลงตวแปรหนงตามทปรากฏกอนหนานในการวเคราะหความแปรปรวนในการฉดยาฆาแมลง
สำหรบการวเคราะหความแปรปรวนนน aov() ยอมรบ syntax เฉพาะเพอกำหนดอทธพลแบบสม (random effects) ตวอยางเชน y ˜ a + Error(b) หมายถงอท-ธพลแบบรวมกนของพจนกำหนด (fixed term) a และพจนสม b.
5.3 ฟงกชนทวไป (generic functions)
เราไดเรยนรแลววาฟงกชนของ R กระทำการโดยการเชอมโยงคณลกษณะของออบเจกตซงอาจผานไปทางอารกวเมนต คลาส (class) ของตนแบบฟงกชนนเปนคณลกษณะทสม-ควรใหความสนใจในทน เปนเรองปกตมากทฟงกชนทางสถตของ R สงออบเจกตหนงของคลาสกลบมาดวยชอเดยวกน (ตวอยางเชน aov สงกลบ ออบเจกตของคลาส "aov"
หรอ lm สงกลบออบเจกตของคลาส "lm") ฟงกชนเหลานสามารถใชในลำดบถดมาเพอสกดผลลพธนจะกระทำการทเฉพาะในสวนของคลาสของออบเจกตนน ฟงกชนเหลานถกเรยกวา generic
ตวอยางเชน ฟงกชนซงนาจะถกใชมากทสดเพอสกดผลลพธจากการวเคราะหคอ summaryซงจะแสดงผลลพธโดยละเอยด ไมวาออบเจกตทถกกำหนดใหตามอารกวเมนตของคลาสจะเปนอยางไรเชน "lm"(ตวแบบเชงเสน) หรอ "aov" (การวเคราะหความแปรปรวน) ชด-เจนวาขอมลทแสดงจะไมเหมอนกน นเปนขอดของฟงกชนทวไปทวา syntax เปนอยางเดยวกนในทกกรณ
ออบเจกตหนงทประกอบดวยผลลพธของการวเคราะหหนงโดยทวไปอยในรปหนงของการแสดงรายการ (list) และเปนวธทถกแสดงเพอระบคลาสของมนดวย ไดเหนแลววาแนว-คดนเปนการดำเนนการของฟงกชนหนงขนอยกบชนดของออบเจกตทถกกำหนดใหตามอาร-กวเมนตซงเปนลกษณะทวไปของ R17 ตารางตอไปนแสดงฟงกชนทวไปทสำคญ ซงสา-มารถถกใชสกดขอมลจากออบเจกตซงเปนผลจากการวเคราะหหนงได การใชทเปนตวอยางของฟงกชนเหลานมดงตอไปน
> mod <- lm(y ~ x)
> df.residual(mod)
[1] 8
17มฟงกชนทวไปมากกวา 100 ฟงกชนใน R
69
print ไดผลเปนสรปอยางยอsummary ไดผลเปนสรปอยางละเอยดdf.residual ไดผลเปนจำนวนของระดบสวนเหลอความเปนอสระ
coef ไดผลเปนคาสมประสทธทประมาณการ (บางครงมาพรอมกบคาคลาดเคลอนมาตรฐาน(stanadard error) ของคาสมประสทธเอง)
residuals ไดผลเปนสวนเหลอ (residuals)deviance ไดผลเปนคาสถตดเวยนส (deviances)fitted ไดผลเปนคาทเหมาะสม (fitted values)logLik คำนวณลอการทมของความควรจะเปน (likelihood) และจำนวนของคาพารามเตอรAIC คำนวณเกณฑขอมล Akaike หรอ AIC (ขนกบ logLik())
ฟงกชนหนงเชน aov หรอ lm ไดผลเปนรายการพรอมดวยสวนประกอบทแตกตางกนของฟงกชนของมนตรงตามผลลพธของการวเคราะห หากใชกรณของเราในการวเคราะหความแปรปรวนดวยขอมลจาก InsectSprays สามารถดโครงสรางของออบเจกตทถกสงคากลบมาโดย aov ดงตอไปน
> str(aov.spray, max.level = -1)
List of 13
- attr(*, "class")= chr [1:2] "aov" "lm"
อกวธหนง เพอจะดโครงสรางนคอการแสดงชอตางๆ ของออบเจกตดงตอไปน
> names(aov.spray)
[1] "coefficients" "residuals" "effects"
[4] "rank" "fitted.values" "assign"
[7] "qr" "df.residual" "contrasts"
[10] "xlevels" "call" "terms"
[13] "model"
หลงจากนน (elements) สามารถถกสกดออกมาตามทไดเหนแลวดงตอไปน
> aov.spray$coefficients
(Intercept) sprayB sprayC sprayD
3.7606784 0.1159530 -2.5158217 -1.5963245
sprayE sprayF
-1.9512174 0.2579388
summary() สรางรายการ (list) ไดเชนกน ซงในกรณของ aov() นนรายการเปนตารางอยางงายของการทดสอบดงตอไปน
70
> str(summary(aov.spray))
List of 1
$ :Classes anova and ‘data.frame’: 2 obs. of 5 variables:
..$ Df : num [1:2] 5 66
..$ Sum Sq : num [1:2] 88.4 26.1
..$ Mean Sq: num [1:2] 17.688 0.395
..$ F value: num [1:2] 44.8 NA
..$ Pr(>F) : num [1:2] 0 NA
- attr(*, "class")= chr [1:2] "summary.aov" "listof"
> names(summary(aov.spray))
NULL
ฟงกชนทวไปโดยปกตไมกระทำการใด ๆ บนออบเจกต หมายความวาฟงกชนเหลานเรยกฟงกชนทเหมาะสมในสวนของคลาสของอารกวเมนตนน ๆ ฟงกชนหนงทใหชอวาเปนทวไป (generic) เปน วธหรอเมธอด (method) หนงในศพทเทคนคเฉพาะ (jargon) ของ Rโดยตามแบบแผนแลวเมธอดหนงถกสรางตาม generic.cls ทซง cls เปนคลาสของออบเจกตนน ตวอยางเชน ในกรณของ summary เราสามารถแสดง เมธอดซงสอดคลองกนไดดงตอไปน
> apropos("^summary")
[1] "summary" "summary.aov"
[3] "summary.aovlist" "summary.connection"
[5] "summary.data.frame" "summary.default"
[7] "summary.factor" "summary.glm"
[9] "summary.glm.null" "summary.infl"
[11] "summary.lm" "summary.lm.null"
[13] "summary.manova" "summary.matrix"
[15] "summary.mlm" "summary.packageStatus"
[17] "summary.POSIXct" "summary.POSIXlt"
[19] "summary.table"
เราสามารถเหนความแตกตางสำหรบฟงกชนทวไปนในกรณของสมการถดถอยเชงเสนทถกเปรยบเทยบกบการวเคราะหความแปรปรวนโดยตวอยางจำลองยอยหนงดงตอไปน
> x <- y <- rnorm(5)
> lm.spray <- lm(y ~ x)
> names(lm.spray)
[1] "coefficients" "residuals" "effects"
[4] "rank" "fitted.values" "assign"
[7] "qr" "df.residual" "xlevels"
71
[10] "call" "terms" "model"
> names(summary(lm.spray))
[1] "call" "terms" "residuals"
[4] "coefficients" "sigma" "df"
[7] "r.squared" "adj.r.squared" "fstatistic"
[10] "cov.unscaled"
ตารางดงตอไปนแสดงฟงกชนทวไปบางฟงกชนทแสดงการวเคราะหเพมขน (supplementaryanalyses) จากออบเจกตหนงซงเปนผลลพธจากการวเคราะหหนงและอารกวเมนตหลกคอออบเจกตทอยถดมา แตในบางกรณอารกวเมนตเพมเตมนนมความจำเปนดงเชน predict
หรอ update.
add1 ทดสอบพจนทงหมดตามลำดบทสามารถถกเพมไปทตวแบบหนงdrop1 ทดสอบพจนทงหมดตามลำดบทสามารถถกเอาออกจากตวแบบหนงstep เลอกตวแบบหนงดวย AIC (เรยก add1 และ drop1)anova คำนวณตารางความแปรปรวนหรอ deviance สำหรบตวแบบหนงหรอหลายรปแบบpredict คำนวณคาพยากรณสำหรบขอมลใหจากตวแบบทเหมาะสมupdate ปรบปรงตวแบบอกครงดวยสตรใหมหรอขอมลใหม
นอกจากนมฟงกชนทเปนประโยชนมากมายทสกดขอมลจากออบเจกตทเปนตวแบบหรอสตร เชน ฟงกชน alias ซงหาพจนไมเปนอสระเชงเสนในตวแบบสมการเชงเสนซงถกระบโดยสตรหนง สดทายมความจำเปนทตองมฟงกชนกราฟก เชน plot ทแสดงผลใหเหนชดขนเพอการตรวจสอบขอผดพลาดตาง ๆ หรอ termplot (ดตวอยางกอนหนาน)ถงแมวาฟงกชน termplot ไมเปน generic แตเรยกวา predict.
5.4 Packages
ตารางตอไปนแสดงรายการแพกเกจมาตรฐาน (standard) ซงมอยในการตดตงพนฐานของR บางแพกเกจถกนำเขาใสในหนวยความจำเมอ R เรมใช ซงสามารถแสดงไดดวยการใชฟงกชน search ดงตอไปน
> search()
[1] ".GlobalEnv" "package:methods"
[3] "package:stats" "package:graphics"
[5] "package:grDevices" "package:utils"
[7] "package:datasets" "Autoloads"
[9] "package:base"
แพกเกจอน ๆ อาจจะถกใชภายหลงถกนำเขาไดดงเชน
72
> library(grid)
รายการของฟงกชนในแพกเกจหนงสามารถถกแสดงไดดวย
> library(help = grid)
หรอโดยการเรยกด help ในรปแบบ html ขอมลทสมพนธในแตละฟงกชนสามารถถกเขาถงไดตามทเหนกอนหนาน (หนา 8).
แพกเกจ คำอธบาย
base base R functionsdatasets base R datasetsgrDevices graphics devices for base and grid graphicsgraphics base graphicsgrid grid graphicsmethods definition of methods and classes for R objects and
programming toolssplines regression spline functions and classesstats statistical functionsstats4 statistical functions using S4 classestcltk functions to interface R with Tcl/Tk graphical user interface
elementstools tools for package development and administrationutils R utility functions
แพกเกจทมสวนสนบสนน (contributed packages) จำนวนมากเพมมากขนในราย-การของวธการทางสถตทใชไดใน R แพกเกจเหลานถกสงแยกกนและจำเปนตองถกตด-ตงและนำเขาใน R การแสดงรายการทสมบรณของแพกเกจเหลานพรอมคำอธบายอยบนเวบไซตของ CRAN18 หลายแพกเกจถกแนะนำเนองจากแพกเกจเหลานครอบคลมวธการทางสถตซงมกถกใชในการวเคราะหขอมล แพกเกจทถกแนะนำเหลานมกถกสงมาพรอมกบการตดตงพนฐานของ R ซงมคำอธบายโดยยอของแตละแพกเกจในตารางตอไปน
18http://cran.r-project.org/src/contrib/PACKAGES.html
73
แพกเกจ คำอธบาย
boot resampling and bootstraping methodsclass classification methodscluster clustering methodsforeign functions for reading data stored in various formats (S3, Stata,
SAS, Minitab, SPSS, Epi Info)KernSmooth methods for kernel smoothing and density estimation (including
bivariate kernels)lattice Lattice (Trellis) graphicsMASS contains many functions, tools and data sets from the libraries
of “Modern Applied Statistics with S” by Venables & Ripleymgcv generalized additive modelsnlme linear and non-linear mixed-effects modelsnnet neural networks and multinomial log-linear modelsrpart recursive partitioningspatial spatial analyses (“kriging”, spatial covariance, . . . )survival survival analyses
คลงเกบขอมลหลกอกสองทของ R แพกเกจคอ Omegahat Project for StatisticalComputing19ซงเนนการประยกตใชงานบนเวบไซตและสวนตอประสานระหวางซอฟตแวรและภาษา สวนอกคลงเกบขอมลคอ Bioconductor Project20 ซงเชยวชาญทางดานการประยกตใชทางชวสารสนเทศโดยเฉพาะสำหรบการวเคราะหขอมลเกยวกบ microarray
ขนตอนทตดตงแพกเกจหนงขนกบระบบปฏบตการและ R ไดถกตดตงจากตนทางหรอpre-compiled binaries หรอไม ในระยะหลงมานแพกเกจทเปน pre-compiled ทมในเวบไซตของ CRAN ถกแนะนำใหใช ภายใตวนโดว binary Rgui.exe มรายการเลอก (menu)“Packages” ซงยอมใหตดตงแพกเกจผานทางอนเทอรเนตจากเวบไซต CRAN หรอจากซปไฟล (zipped files) ไปทจานบนทกเฉพาะท (local disk)
ถา R ไดถกแปลคำสง (compiled) แลวแพกเกจหนงสามารถถกตดตงจากตนทาง (source)ของมนซงถกสงเปนไฟล ‘.tar.gz’ ตวอยางเชน ถาเราตองการตดตงแพกเกจ gee เราจะตองดาวนโหลด (download) ไฟล gee 4.13-6.tar.gz ลงกอน (เลข 4.13-6 บงบอกรนหรอเวอรชน (version) ของแพกเกจ ซงโดยทวไปแลวมเพยงหนงรนทมไดใน CRAN) หลงจากนนเราจะพมพคำสงจากระบบ (และไมใชใน R) ดงน
R CMD INSTALL gee_4.13-6.tar.gz
19http://www.omegahat.org/R/20http://www.bioconductor.org/
74
มฟงกชนทเปนประโยชนมากมายเพอจดการแพกเกจ เชน installed. packages
CRAN.packages หรอ download.packages รวมทงยงเปนประโยชนดวยในการพมพคำสงตอไปนอยางสมำเสมอ
> update.packages()
ซงเปนการตรวจสอบรนของแพกเกจทถกตดตงกบรนทมใน CRAN (คำสงนสามารถถกเรยกจากรายการเลอก “Packages” ในวนโดว หลงจากนนผใชสามารถปรบ (update) แพกเกจใหเปนปจจบนดวยรนทใหมกวาโดยการตดตงบนคอมพวเตอร
75
6 การเขยนโปรแกรมดวย R ในทางปฏบต
เราไดแสดงใหเหนภาพรวมของการทำงานตาง ๆ ของ R ถงตรงนเราจะกลบมาทภาษาการเขยนโปรแกรมซง เราจะไดทราบแนวคดอยางงายบางอยางทอาจจะถกใชในทางปฏบตต
6.1 การวนรอบและและการใชเวกเตอร (loops and vectorization)
ขอดของ R เมอเปรยบเทยบกบซอฟตแวรทมรายการเลอกแบบดงลง (pull-down menus)คอความเปนไปไดในการเขยนโปรแกรมไดอยางงายของลำดบของการวเคราะหซงจะถกดำ-เนนการอยางตอเนอง คณลกษณะนพบไดทวไปในภาษาคอมพวเตอร แต R มลกษณะทเฉพาะบางอยางซงการเขยนโปรแกรมทำใหผทไมไดเปนผเชยวชาญเขาใจไดงายขน
คลายภาษาคอมพวเตอรอน ๆ R ม โครงสรางควบคม (control structure) บางอยางซงคลายกบโครงสรางของภาษา C สมมตเราม เวกเตอร x และสำหรบแตละ element ของx กบคา b เราตองการทจะใหคา 0 ไปยงตวแปรอกตวคอ y มฉะนนคาเปน 1 กอนอนเราตองสรางเวกเตอร y โดยทมความยาวเดยวกนกบ x ดงน
y <- numeric(length(x))
for (i in 1:length(x)) if (x[i] == b) y[i] <- 0 else y[i] <- 1
มหลายวธทสามารถถกกระทำการถาการกระทำเหลานนอยภายในวงเลบ ดงเชน
for (i in 1:length(x)) {
y[i] <- 0
...
}
if (x[i] == b) {
y[i] <- 0
...
}
เงอนไขทเปนไปไดอกแบบคอกระทำการตามคำสงตราบใดทเงอนไขนนเปนจรง ดงเชน
76
while (myfun > minimum) {
...
}
อยางไรกตาม แบบเปนรอบและโครงสรางควบคมสามารถถกหลกเลยงไดในเงอนไขสวนมาก ซงตองขอบคณในคณลกษณะของ R คอการใชเวกเตอร vectorization การใชเวก-เตอรทำใหการวนรอบถกตองในนพจนและเราไดเหนแลวจากหลายกรณ ตอไปนเรามาพ-จารณาการบวกของสองเวกเตอร
> z <- x + y
การบวกนอาจถกเขยนดวยแบบวนรอบตามทถกกระทำในภาษาคอมพวเตอรสวนใหญดงน
> z <- numeric(length(x))
> for (i in 1:length(z)) z[i] <- x[i] + y[i]
ในกรณน มความจำเปนในการสรางเวกเตอร z กอนเนองจากการใชของระบบการทำดชน (indexing system) เราไดเหนวาการวนรอบทชดเจนนจะใชงานไดกตอเมอ x และy มความยาวเทากน นนหมายความวามนตองถกเปลยนถาไมเปนความจรง ขณะทนพจนแรกจะใชงานไดในทกเงอนไข
การกระทำการแบบมเงอนไข (if ... else) สามารถถกเลยงไดดวยการใชการทำดชนเชงตรรกะ (logical indexing) ดงน โดยใหกลบไปทตวอยางกอนหนาน
> y[x == b] <- 0
> y[x != b] <- 1
นอกจากงายขนแลว นพจนถกทำใหเปนเวกเตอรทมประสทธภาพมากกวาในเชงคำนวณโดยเฉพาะกบปรมาณของขอมลมากๆ
ยงมหลายฟงกชนดวยเชนกนของชนด ‘apply’ ซงหลกเลยงการเขยนแบบเปนวนรอบapply กระทำการบนแถวและ/หรอคอลมนของเมทรกซซง syntax ของมนคอ apply(X,MARGIN, FUN, ...) โดยท X คอเมทรกซหนง MARGIN บงบอกวาแถว (1) คอ-ลมน (2) หรอทงสอง (c(1, 2)) ทพจารณา FUN เปนฟงกชนหนง (หรอเปนตวดำเนนการ แตในกรณนมนตองถกระบอยในเครองหมายวงเลบ) เพอ apply และ ... เปนอารกวเมนตตวเลอกทเปนไปไดสำหรบ FUN ตวอยางอยางงายมดงตอไปน
> x <- rnorm(10, -5, 0.1)
> y <- rnorm(10, 5, 2)
> X <- cbind(x, y) # the columns of X keep the names "x" and "y"
> apply(X, 2, mean)
77
x y
-4.975132 4.932979
> apply(X, 2, sd)
x y
0.0755153 2.1388071
lapply() กระทำการบนรายการหนงโดยท syntax ของมนมความคลายคลงกบ apply
และจะไดผลกลบมาเปนรายการดงน
> forms <- list(y ~ x, y ~ poly(x, 2))
> lapply(forms, lm)
[[1]]
Call:
FUN(formula = X[[1]])
Coefficients:
(Intercept) x
31.683 5.377
[[2]]
Call:
FUN(formula = X[[2]])
Coefficients:
(Intercept) poly(x, 2)1 poly(x, 2)2
4.9330 1.2181 -0.6037
sapply() เปนรปแบบหนงของ lapply() ทแตกตางออกไปแตมความยดหยนซงสามารถมเวกเตอรหรอเมทรกซไดทำนองเดยวกบอารกวเมนตหลก และไดผลลพธกลบมาในรปแบบทโดยทวไปเปนตารางซงอาจใชงานงายกวา
6.2 การเขยนโปรแกรใน R
โดยปกตแลวโปรแกรม R ถกเขยนในไฟลทถกบนทกในรปแบบ ASCII และถกใหชอกบนามสกลของไฟล (extension) วา ‘.R’ ในเงอนไขทวไปซงโปรแกรมหนงมประโยชนกตอเมอผใชงานตองการทำงานเดยวกนในหลายชวงเวลา ในตวอยางแรกนผเขยนตองการทำ
78
การพลอตแบบเดยวกนสำหรบนกทตางกนสามชนด ขอมลอยในไฟลทแยกกนสามไฟล ผเขยนจะดำเนนการเปนขน ๆ และจะเหนวธทตางกนเพอเขยนโปรแกรมสำหรบประเดนทงายมากน
กอนอนเราตองทำโปรแกรมของเราเองในวธทางทงายตอการใชและเขาใจไดมากทสดโดยการกระทำการตามลำดบโดยคำสงทจำเปนซงรวมทงทำการแบงสวนของกราฟก (graphicaldevice) ลวงหนาดวย ดงตวอยาง
layout(matrix(1:3, 3, 1)) # partition the graphics
data <- read.table("Swal.dat") # read the data
plot(data$V1, data$V2, type="l")
title("swallow") # add a title
data <- read.table("Wren.dat")
plot(data$V1, data$V2, type="l")
title("wren")
data <- read.table("Dunn.dat")
plot(data$V1, data$V2, type="l")
title("dunnock")
อกขระ ‘#’ ถกใชเพอเพมความเหนในโปรแกรม จากนน R จะไปทบรรทดถดไป
ปญหาขางตนของการเขยนโปรแกรมแรกนคอวามนอาจดคอนขางยาวถาเราตองการเพมสปชสอน ยงไปกวานนบางคำสงถกกระทำการหลายครงดงนนคำสงเหลานสามารถจดกลม-กนและดำเนนการภายหลงการเปลยนอารกวเมนตบางอยาง กลยทธทถกใชในทนคอการใสอารกวเมนตเหลานในเวกเตอรของโหมดอกขระและหลงจากนนใชการทำดชน (indexing)เพอเขาถงคาทแตกตางกนเหลานดงน
layout(matrix(1:3, 3, 1)) # partition the graphics
species <- c("swallow", "wren", "dunnock")
file <- c("Swal.dat" , "Wren.dat", "Dunn.dat")
for(i in 1:length(species)) {
data <- read.table(file[i]) # read the data
plot(data$V1, data$V2, type="l")
title(species[i]) # add a title
}
สงเกตไดวาไมมเครองหมายอญประกาศ (double quotes) ลอมรอบ file[i] ในread.table() เนองจากอารกวเมนตนเปนโหมดอกขระ
79
โปรแกรมของเราในตอนนมความกระชบมากขน งายขนตอการเพมสปชสอน ๆ เนองจากเวกเตอรเหลานนทประกอบดวยสปชสและชอไฟลอยในสวนตนของโปรแกรม
โปรแกรมเหลานทไดกลาวกอนหนาจะทำงานไดอยางถกตองถาไฟลขอมล ‘.dat’ ถกทำใหอยในตำแหนงการทำงาน (working directory) ของ R มฉะนนแลวผใชจำเปนตองเปลยนตำแหนงการทำงานหรอระบเสนทาง (path) ใหในโปรแกรม (ตวอยางเชน file
<- "/home/paradis/data/Swal.dat") ถาโปรแกรมถกเขยนในไฟล Mybirds.Rแลวมนสามารถถกเรยกออกมาไดโดยการพมพดงตอไปน
> source("Mybirds.R")
คลายขอมลนำเขา (input) ใด ๆ จากไฟลหนง มนมความจำเปนในการกำหนดเสนทางเพอเขาถงไฟลนนถาไฟลนนไมไดอยในตำแหนงการทำงาน
6.3 การเขยนฟงกชนดวยตวเอง
เราไดเหนแลววาการทำงานของ R สวนมากเกยวของกบฟงกชนซงอารกวเมนตถกกำหนดใหอยภายในเครองหมายวงเลบ ผใชสามารถเขยนฟงกชนไดดวยตวเองและแนนอนฟงกชนเหลานจะมคณสมบตเชนเดยวกบฟงกชนอน ๆ ใน R
การเขยนฟงกชนดวยตวเองทำใหการใช R มประสทธภาพ ยดหยนและสมเหตสมผลกลบมาทตวอยางของเราของการอานขอมลบางขอมลซงตามมาดวยการพลอตกราฟ ถาเราตองการทำการปฏบตการในเงอนไขทแตกตางกนมนอาจจะเปนแนวคดทดทเขยนฟงกชนหนงขนมาดงตวอยางตอไปน
myfun <- function(S, F)
{
data <- read.table(F)
plot(data$V1, data$V2, type="l")
title(S)
}
เพอใหถกกระทำได ฟงกชนนตองถกนำเขาในหนวยความจำและการนำเขาสามารถกระทำไดในหลายวธ ในบรรทดของฟงกชนนสามารถถกพมพเขาโดยตรงผานทางแผนแปนอก-ขระ (keyboard) คลายกบคำสงอน ๆ หรอสำเนา (copy) และวาง (paste) จากเอดเตอร(editor) ถาฟงกชนไดถกบนทกไวในไฟลขอความ (text file) แลวมนสามารถถกนำเขาไดดวยฟงกชน source() ในทำนองเดยวกบโปรแกรมอน ถาผใชตองการบางฟงกชนใหถกนำเขาในแตละครงท R เรมทำงาน ฟงกชนเหลานสามารถถกบนทกไวใน workspace.RData ซงจะถกนำเขาในหนวยความจำถามนอยในไดเรกทอรทกำลงทำงาน ความเปนไปไดอกทางหนงคอกำหนดไฟลใหเหมาะสมดวย ’.Rprofile’ หรอ ’Rprofile’ (ด ?Startup
80
สำหรบรายละเอยด) สดทายมความเปนไปไดทจะสรางแพกเกจแตการสรางแพกเกจจะไมถกกลาวถงในทน (ดคมอ “Writing R Extensions”)
ทนททฟงกชนถกนำเขา เราจะสามารถใชคำสงเดยวในการอานขอมลและพลอตกราฟได ตวอยางเชนกบ myfun("swallow", "Swal.dat") ดงนนในตอนนเรามโปร-แกรมของเราเปนเวอรชนทสามดงตอไปน
layout(matrix(1:3, 3, 1))
myfun("swallow", "Swal.dat")
myfun("wren", "Wrenn.dat")
myfun("dunnock", "Dunn.dat")
นอกจากนเราอาจจะใช sapply() นำไปสเวอรชนทสของโปรแกรมของเราดงน
layout(matrix(1:3, 3, 1))
species <- c("swallow", "wren", "dunnock")
file <- c("Swal.dat" , "Wren.dat", "Dunn.dat")
sapply(species, myfun, file)
ใน R มนไมมความจำเปนตองแจงตวแปรทถกใชภายในฟงกชนหนง เมอฟงกชนนนถกกระทำการแลว R ใชกฎทเรยกวา lexical scoping เพอตดสนวาออบเจกตเปน localตอฟงกชนนนหรอเปน global เพอทจะเขาใจกลไกน ใหเราพจารณาฟงกชนทงายมากขางลางน
> foo <- function() print(x)
> x <- 1
> foo()
[1] 1
ชอ x ไมไดถกใชเพอสรางออบเจกตภายใน foo() ดงนน R จะหาในสภาพแวดลอมท enclosing ถามออบเจกตทถกเรยกวา x และจะพมพคาของมน (มฉะนนแลวขอความทระบความผดพลาดจะถกแสดงและทำใหหยดกระทำการ)
ถา x ถกนำไปใชเชนชอของออบเจกตภายในฟงกชน คาของ x ในสภาพแวดลอมglobal จะไมถกใช
> x <- 1
> foo2 <- function() { x <- 2; print(x) }
> foo2()
[1] 2
> x
[1] 1
81
จากตวอยางขางตน print() ใชออบเจกต x ซงถกกำหนดใหไวภายในสภาพแวด-ลอมคอ สภาพแวดลอมของ foo2
คำวา “enclosing” ขางตนเปนคำสำคญ ในสองฟงกชนตวอยางนมสองสภาพแวดลอมคอ global และอกหนงสภาพแวดลอมของฟงกชน foo หรอ foo2 ถามสามหรอมากกวาสามสภาพแวดลอมทซอนขางใน (nested environment) แลวการคนหาสำหรบออบเจกตถกทำไดดขนจากสภาพแวดลอมทถกกำหนดใหถงสภาพแวดลอม enclosing ไปเรอย ๆ จนถงสภาพแวดลอม global
มสองวธเพอระบอารกวเมนตไปยงฟงกชนซงทำโดยตำแหนงหรอโดยชอของอารกวเมนต(tagged arguments เปนอกชอทถกเรยก) ตวอยางเชน ถาเราพจารณาฟงกหนงทมสามอารกวเมนตดงตอไปน
foo <- function(arg1, arg2, arg3) {...}
foo() สามารถถกกระทำการไดโดยปราศจากการใชชอ arg1, . . . ถาออบเจกตทเชอมโยงถกใสในตำแหนงทถกตอง ตวอยางเชน foo(x, y, z) อยางไรกตามตำ-แหนงไมมความสำคญหากชอของอารกวเมนตถกนำไปใช ตวอยางเชน foo(arg3 =
z, arg2 = y, arg1 = x) คณลกษณะอกอยางหนงของฟงกชน R คอความเปนไปไดในการใชคาโดยปรยายในนยามของมน ดงตวอยางตอไปน
foo <- function(arg1, arg2 = 5, arg3 = FALSE) {...}
คำสง foo(x), foo(x, 5, FALSE) และ foo(x, arg3 = FALSE)
จะไดผลลพธเดยวกนอยางสมบรณ การใชคาโดยปรยายในนยามของฟงกชนเปนประโยชนมาก โดยเฉพาะเมอถกใชกบ tagged arguments (เชน เพอเปลยนเพยงคาโดยปรยายคาหนงคอ foo(x, arg3 = TRUE)).
เพอสรปในสวนน พจารณาอกหนงตวอยางซงไมไดเปนตวอยางทางสถตจรงๆ แตตว-อยางนแสดงถงความยดหยนของ R เมอพจารณาวาตองการศกษาพฤตกรรมของตวแบบไมเชงเสน (non-linear model) ตวแบบนของ Ricker ถกนยามไวดงสมการตอไปน
Nt+1 = Nt exp
[r
(1− Nt
K
)]
ตวแบบนถกใชอยางกวางขวางในพลวตประชากรโดยเฉพาะของปลา ซงตองการใชฟงก-ชนหนงเพอสรางตวแบบจำลองสถานการณในสวนของอตราการเตบโต (r) จำนวนประ-ชากรเรมตน (N0) (คาความจของประชากร (carrying capacity: K มกไดคาเทากบ1 และคานจะถกทำใหเปนคาโดยปรยาย) ซงผลลพธจะถกแสดงเปนการพลอตของจำนวนทเกยวของกบเวลา โดยจะเพมตวเลอกเพอทำใหผใชแสดงเพยงแคจำนวนในระยะเวลาชวงทายเลกนอยเทานน (คาโดยปรยายคอผลลพธทงหมดจะถกพลอต) ฟงกชนตอไปนสามารถทำการวเคราะหตวเลขของตวแบบ Ricker ได
82
ricker <- function(nzero, r, K=1, time=100, from=0, to=time)
{
N <- numeric(time+1)
N[1] <- nzero
for (i in 1:time) N[i+1] <- N[i]*exp(r*(1 - N[i]/K))
Time <- 0:time
plot(Time, N, type="l", xlim=c(from, to))
}
โดยสามารถทำดวยตวเองดงตวอยางน
> layout(matrix(1:3, 3, 1))
> ricker(0.1, 1); title("r = 1")
> ricker(0.1, 2); title("r = 2")
> ricker(0.1, 3); title("r = 3")
83
7 เอกสารเกยวกบ R
คมอ (manuals) คมอมากมายเกยวกบ R ถกสงไปใน R HOME/doc/manual/:
• An Introduction to R [R-intro.pdf],
• R Installation and Administration [R-admin.pdf],
• R Data Import/Export [R-data.pdf],
• Writing R Extensions [R-exts.pdf],
• R Language Definition [R-lang.pdf].
ไฟลเหลานอาจอยในรปแบบแตกตางกน (pdf, html, texi, . . . ) โดยขนอยกบชนดของการตดตง
เอฟเอคว (FAQ) R ถกสงมาพรอมกบคำถามทพบบอย (Frequently Asked Questions)ซงอยทไดเรกทอร (directory) R HOME/doc/html/ เวอรชนของ R-FAQ จะถกปรบใหเปนปจจบนเสมอบนเวบไซตของ CRAN ดงตอไปน
http://cran.r-project.org/doc/FAQ/R-FAQ.html
ทรพยากรในระบบเครอขาย (on-line resources) เวบไซตของ CRAN เกบเอกสารมาก-มาย ทรพยากรทางบรรณานกรมและการเชอมโยงไปยงเวบไซตอน ๆ นอกจากนยงแสดงรายการของการตพมพหรอเผยแพร (หนงสอหรอบทความ) เกยวกบ R หรอวธการทางสถต21 และเอกสารบางอยางรวมทงการสอนซงถกเขยนโดยผใช R22.
รายชอและทอยผไดรบขอมล (mailing lists) มสรายการของการสนทนาในการแลกเปลยนเรยนรเรองของ R ซงเกยวของกบการสมครสมาชก การสงขอความและการอานการเกบถาวร (archives) ดไดท http://www.R-project.org/mail.html.
‘r-help’ เปนรายการของการสนทนาทวไปหนงทเปนแหลงของขอมลทนาสนใจสำ-หรบผใช R (อกสามรายการถกเสนอใหแจงในเวอรชนใหมและเปนรายการสำหรบนกพฒนาโปรแกรม) ผใช R มากมายไดสงฟงกชนหรอโปรแกรมไปท ‘r-help’ ซงสามารถถกพบไดในการเกบถาวร ถาพบปญหาเกยวกบ R แลว ควรจะดำเนนการตามลำดบตอไปนกอนสงขอความไปท ‘r-help’
1. อาน online help อยางรอบคอบ (อาจใชเครองคนหา (search engine)21http://www.R-project.org/doc/bib/R-publications.html22http://cran.r-project.org/other-docs.html
84
2. อาน R-FAQ
3. คนหาการเกบถาวรของ ‘r-help’ ซงทอยดานบนหรอโดยการใชหนงในเครองคนหาซงถกพฒนาโดยบางเวบไซต23
4. อาน “posting guide”24 กอนสงคำถาม
ขาว R (R News) วารสารอเลกทรอนกส R News มจดมงหมายเพอเขาถงความรเกยวกบ R หรอใหบรการเพอเตมชองวางระหวางการสนทนาแลกเปลยนเรยนรทางอเลก-ทรอนกส (electronic discussion) และการตพมพทางวทยาศาสตรแบบดงเดม ขาวR ฉบบแรกถกเผยแพรในเดอนมกราคม 2001 25
การอางอง R ในการตพมพและเผยแพร (citing R in a publication) สดทายถามการกลาวถง R ในการตพมพและเผยแพร การอางองดงตอไปนตองถกกลาวถง
R Development Core Team (2005). R: A language and environmentfor statistical computing. R Foundation for Statistical Computing,Vienna, Austria. ISBN 3-900051-07-0, URL: http://www.R-project.org.
23ทอยของทตงเหลานถกแสดงรายการท http://cran.r-project.org/search.html24http://www.r-project.org/posting-guide.html25http://cran.r-project.org/doc/Rnews/
85
Recommended