r...

89
R สำหรับผู้เริ่มต้น Emmanuel Paradis 1 (translation: Chantima Piyapong 2 , edition: Julien Claude 1 ) 1: Institut des Sciences de l’ ´ Evolution Universit ´ e Montpellier F-34095 Montpellier c ´ edex 05 France E-mail: [email protected] 2: Department of Biology, Faculty of Science Burapha University Chonburi, 20131 Thailand E-mail: [email protected]

Upload: others

Post on 30-Oct-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

R สำหรบผเรมตน

Emmanuel Paradis1 (translation: ChantimaPiyapong2, edition: Julien Claude1)

1: Institut des Sciences de l’EvolutionUniversite Montpellier

F-34095 Montpellier cedex 05France

E-mail: [email protected]

2: Department of Biology, Faculty of ScienceBurapha University

Chonburi, 20131Thailand

E-mail: [email protected]

Page 2: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

กตตกรรมประกาศ

การแปลเอกสาร 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.เอกสารนไดรบการอนญาตใหจดทำขนและเผยแพรภายใตลขสทธขางตน การผลตและลอกเลยนเอกสารนไมวารปแบบใดยอมกระทำไดแตตองไดรบอนญาตจากเจาของลขสทธเทานน

Page 3: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

สารบญ

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

Page 4: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 5: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 6: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 7: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 8: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ขณะท 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

Page 9: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ฟงกชนและตวดำเนนการ

?

ออบเจกตทเปนขอมล

?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

Page 10: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 11: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ขอสงเกตสำหรบการใชเครองหมาย 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

Page 12: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

เพอจะลบออบเจกตออกไปจากหนวยความจำนนเราสามารถใช ฟงกชน 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

Page 13: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 14: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

การคนหาผานคำสำคญ (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

Page 15: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 16: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

[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

Page 17: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ตารางตอไปนแสดงภาพรวมชนดของออบเจกตทแสดงขอมล

ออบเจกต โหมด ออบเจกตเดยวกนเปนไดหลายโหมดหรอไม

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

Page 18: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 19: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 20: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

จากคำสงขางบนเปนการอานในไฟล 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

Page 21: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 22: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 23: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 24: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 25: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 26: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

...)), 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

Page 27: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ขนในเรองแนวคดบางอยางของ 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

Page 28: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 29: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

[,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

Page 30: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 31: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 32: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 33: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 34: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 35: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ตวดำเนนการเลขคณตและเปรยบเทยบกระทำการตอ 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

Page 36: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ของความแตกตาง สำหรบฟงกชน 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

Page 37: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 38: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

[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

Page 39: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

สำหรบการแสดงรายการ (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

Page 40: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 41: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 42: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

เวกเตอรสามารถถกใชเพอจดการกบนพจนเลขคณตดงเดมได ดงตวอยางตอไปน

> 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

Page 43: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 44: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 45: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

ตวดำเนนการสำหรบผลผลตของสองเมทรกซคอ ‘%*%’ ตวอยางเชน พจารณาสองเม-ทรกซคอ 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

Page 46: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

[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

Page 47: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 48: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

?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()

pdf

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()

pdf

4

ลกษณะเฉพาะสองอยางของเวอรชนวนโดว ของ R ซงควรคาตอการกลาวถงคอ WindowsMetafile device สามารถถกเปดดวยฟงกชน win.metafile และเมน “History” ถกแสดงเมอวนโดวกราฟกถกเลอกซงยอมใหบนทกกราฟทงหมดทถกวาดระหวางชด (session)หนง (โดยคาปรยาย ระบบการบนทกถกปด ผใชตองเปดมนขนมาโดยกดไปท “Recording”ในเมนน)

44

Page 49: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 50: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 51: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 52: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 53: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 54: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 55: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 56: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 57: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

* ? 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

Page 58: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 59: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

−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

Page 60: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

−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

Page 61: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 62: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 63: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 64: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 65: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 66: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 67: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 68: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 69: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 70: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 71: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

กอนการพมพ 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

Page 72: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 73: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

หมายตามเครองหมายของมนเอง) เพอรวมการดำเนนการเลขคณตในสตร เราสามารถใชฟงกชน 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

Page 74: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 75: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 76: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

[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

Page 77: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

> 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

Page 78: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

แพกเกจ คำอธบาย

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

Page 79: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

มฟงกชนทเปนประโยชนมากมายเพอจดการแพกเกจ เชน installed. packages

CRAN.packages หรอ download.packages รวมทงยงเปนประโยชนดวยในการพมพคำสงตอไปนอยางสมำเสมอ

> update.packages()

ซงเปนการตรวจสอบรนของแพกเกจทถกตดตงกบรนทมใน CRAN (คำสงนสามารถถกเรยกจากรายการเลอก “Packages” ในวนโดว หลงจากนนผใชสามารถปรบ (update) แพกเกจใหเปนปจจบนดวยรนทใหมกวาโดยการตดตงบนคอมพวเตอร

75

Page 80: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 81: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 82: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 83: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

การพลอตแบบเดยวกนสำหรบนกทตางกนสามชนด ขอมลอยในไฟลทแยกกนสามไฟล ผเขยนจะดำเนนการเปนขน ๆ และจะเหนวธทตางกนเพอเขยนโปรแกรมสำหรบประเดนทงายมากน

กอนอนเราตองทำโปรแกรมของเราเองในวธทางทงายตอการใชและเขาใจไดมากทสดโดยการกระทำการตามลำดบโดยคำสงทจำเปนซงรวมทงทำการแบงสวนของกราฟก (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

Page 84: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

โปรแกรมของเราในตอนนมความกระชบมากขน งายขนตอการเพมสปชสอน ๆ เนองจากเวกเตอรเหลานนทประกอบดวยสปชสและชอไฟลอยในสวนตนของโปรแกรม

โปรแกรมเหลานทไดกลาวกอนหนาจะทำงานไดอยางถกตองถาไฟลขอมล ‘.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

Page 85: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

สำหรบรายละเอยด) สดทายมความเปนไปไดทจะสรางแพกเกจแตการสรางแพกเกจจะไมถกกลาวถงในทน (ดคมอ “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

Page 86: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

จากตวอยางขางตน 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

Page 87: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 88: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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

Page 89: R สำหรับผู้เริ่มต้นape-package.ird.fr/ep/R_for_beginners_in_Thai.pdf · กิตติกรรมประกาศ การแปลเอกสาร

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