Libro

The Art of R Programming: เขียน R ให้เป็นโปรแกรม ไม่ใช่แค่สั่งคำนวณ statistics

หนังสือของ Norman Matloff ที่สอน R ในมุมการพัฒนาซอฟต์แวร์ ตั้งแต่ vector และ data frame ไปจนถึง debugging การเพิ่มสมรรถนะ และ parallel R บทความนี้สรุปจากสารบัญและบทที่ 3 ที่ No Starch Press เปิดให้อ่านตัวอย่าง

ภาพประกอบบทความ: ปกหนังสือ The Art of R Programming โดย Norman Matloff

ขอบเขตของบทความ: สรุปจากสารบัญและบทที่ 3 Matrices and Arrays ที่ No Starch Press เผยแพร่ให้อ่านตัวอย่าง รวมกับคำอธิบายบนหน้าหนังสือของสำนักพิมพ์ ยังไม่ได้อ่านบทอื่นนอกจากบทที่ 3 ข้อสังเกตเรื่องบทอื่นมาจากชื่อบทในสารบัญเท่านั้น

หลายคนเริ่มใช้ R จากงาน statistics หรือวิเคราะห์ข้อมูล เขียนสคริปต์ได้ แต่พอโค้ดยาวขึ้นก็เจอปัญหาที่เป็นเรื่องการเขียนโปรแกรมมากกว่า statistics เช่น โค้ดช้า หาบั๊กยาก หรือผลลัพธ์เปลี่ยนรูปแบบโดยไม่ตั้งใจ The Art of R Programming เขียนมาสำหรับช่องว่างนี้ บทความนี้ช่วยดูว่าเล่มนี้สอนอะไร และเหมาะกับใคร

หนังสือเล่มนี้ว่าด้วยอะไร

The Art of R Programming: A Tour of Statistical Software Design เขียนโดย Norman Matloff ตีพิมพ์โดย No Starch Press เดือนตุลาคม 2011 ความยาว 400 หน้า ISBN 9781593273842 (หน้าหนังสือของ No Starch Press) Open Library บันทึกฉบับเดียวกันว่าพิมพ์ที่ San Francisco

หน้าสำนักพิมพ์อธิบายว่าเป็นการพาเที่ยวการพัฒนาซอฟต์แวร์ด้วย R ตั้งแต่ชนิดข้อมูลพื้นฐานจนถึง closure, recursion และ anonymous function และระบุว่า ไม่ต้องมีพื้นฐาน statistics ผู้เขียนเป็นศาสตราจารย์ด้านวิทยาการคอมพิวเตอร์ที่ UC Davis เคยเป็นศาสตราจารย์ด้าน statistics และเขียน The Art of Debugging กับ No Starch Press ด้วย

เนื้อหาครอบคลุมหัวข้ออะไร

สารบัญบนหน้าสำนักพิมพ์มี 16 บทและภาคผนวกสองภาค

กลุ่ม

บท

หัวข้อตามสารบัญ

โครงสร้างข้อมูล

1–6

Getting Started, Vectors, Matrices and Arrays, Lists, Data Frames, Factors and Tables

การเขียนโปรแกรม

7–9

R Programming Structures, Doing Math and Simulations in R, Object-Oriented Programming

งานรอบข้าง

10–12

Input/Output, String Manipulation, Graphics

คุณภาพและสมรรถนะ

13–16

Debugging, Performance Enhancement: Tradeoffs in Time and Space, Interfacing R to Other Languages, Parallel R

ภาคผนวก

A–B

Installing R, Installing and Using Packages

การจัดกลุ่มในตารางเป็นของบทความนี้ ไม่ใช่การแบ่งภาคของหนังสือ ช่วงท้ายเล่มที่ว่าด้วย debugging สมรรถนะ การเชื่อม R กับ C/C++ และ Python และการประมวลผลแบบขนาน คือส่วนที่ทำให้เล่มนี้ต่างจากหนังสือ R สำหรับงาน statistics ทั่วไป

แนวคิดที่น่าสนใจจากบทที่ 3

บทที่ 3 Matrices and Arrays (หน้า 59–83 ตามเลขหน้าในไฟล์) เปิดให้อ่านเป็นตัวอย่าง (บทที่ 3) และแสดงสไตล์การสอนของทั้งเล่มได้ชัด

  • matrix คือ vector ที่มีจำนวนแถวและคอลัมน์กำกับ ผู้เขียนเปิดบทด้วยนิยามนี้ และอธิบายว่า R เก็บ matrix แบบ column-major การใส่ byrow=T ใน matrix() เปลี่ยนแค่ลำดับการรับข้อมูลเข้า ไม่ได้เปลี่ยนวิธีเก็บ (หัวข้อ 3.1)

  • ตัวอย่างขยายที่ใช้ข้อมูลจริง บทนี้มี Extended Example หลายชิ้น เช่น การแก้ภาพขาวดำของ Mount Rushmore ด้วยแพ็กเกจ pixmap การสร้าง covariance matrix การหา outlier และการหาคู่จุดยอดที่ใกล้ที่สุดในกราฟ (หัวข้อ 3.2.3, 3.2.5, 3.3.2, 3.4.2)

  • `apply()` ไม่ได้ทำให้เร็วขึ้นเสมอ ผู้เขียนแย้งความเชื่อทั่วไปว่าการใช้ apply() โดยทั่วไปไม่ได้เร่งความเร็วโค้ด ข้อดีคือโค้ดกระชับ อ่านและแก้ง่าย และเลี่ยงบั๊กจากการเขียนลูปเอง (หัวข้อ 3.3.1)

  • ระวังการสร้าง matrix ซ้ำ ๆ ผู้เขียนเตือนว่า rbind() และ cbind() สร้าง matrix ใหม่ทุกครั้ง ซึ่งกินเวลา (หัวข้อ 3.4.1)

  • dimension reduction ที่ไม่ตั้งใจ เมื่อดึงแถวเดียวจาก matrix ผลลัพธ์จะกลายเป็น vector ผู้เขียนแนะนำให้ใส่ drop=FALSE เป็นนิสัยในโค้ดที่ทำงานกับ matrix และอธิบายว่า [ เองก็เป็นฟังก์ชัน (หัวข้อ 3.6)

เรื่อง drop=FALSE เป็นตัวอย่างที่ดีของสิ่งที่ผู้ใช้ R สายวิเคราะห์ข้อมูลมักพลาด เช่น ฟังก์ชันที่คาดว่าจะได้ matrix หนึ่งแถว แต่ได้ vector กลับมาแทน แล้วคำนวณผิดโดยไม่มี error ย่อหน้านี้เป็นคำอธิบายประกอบของบทความ ส่วนรายละเอียดอยู่ในหัวข้อ 3.6

พื้นฐานที่ควรมีก่อนอ่าน

หน้าสำนักพิมพ์ระบุว่าไม่ต้องมีพื้นฐาน statistics และเหมาะทั้งมือสมัครเล่นและมืออาชีพ จากบทที่ 3 ผู้เขียนอ้างถึงเนื้อหาในบทที่ 2 เรื่อง vector อยู่หลายจุด และมีการคูณ matrix ด้วย %*% การคุ้นกับพีชคณิตเชิงเส้นเบื้องต้นจึงช่วยให้ตามตัวอย่างได้ง่ายขึ้น ส่วนบทท้ายเล่มที่เชื่อม R กับ C/C++ น่าจะต้องอ่านโค้ด C ได้บ้าง ข้อหลังนี้อนุมานจากชื่อบท

เหมาะกับใคร และใครควรเริ่มจากเล่มอื่นก่อน

  • เหมาะ กับคนที่ใช้ R วิเคราะห์ข้อมูลหรือทำงานเชิงปริมาณอยู่แล้ว และอยากเขียนโค้ดที่เป็นระบบ เร็วขึ้น และหาบั๊กได้

  • เหมาะ กับโปรแกรมเมอร์จากภาษาอื่นที่ต้องเริ่มใช้ R เพราะหนังสือสอนในมุมภาษาโปรแกรม ไม่ใช่มุม statistics

  • ควรเริ่มจากเล่มอื่น ถ้าต้องการเรียน statistical methods หรือการวิเคราะห์ time series ด้วย R เพราะสารบัญไม่ได้มีบทเฉพาะเรื่องเหล่านั้น

ข้อจำกัดของข้อมูลที่ใช้ในบทความนี้

  • อ่านเฉพาะบทที่ 3 และสารบัญระดับบท บทอื่นสรุปจากชื่อบทเท่านั้น

  • ฉบับนี้ตีพิมพ์ปี 2011 แพ็กเกจและฟังก์ชันที่ใช้ในเล่ม เช่น pixmap หรือแพ็กเกจสำหรับประมวลผลแบบขนาน อาจมีทางเลือกที่ใหม่กว่าแล้ว ควรตรวจกับเอกสารของ R รุ่นปัจจุบัน

  • หน้าสำนักพิมพ์ระบุ 400 หน้า ส่วน Open Library บันทึกเลขหน้า xxiii และ 373 หน้า น่าจะนับต่างกันเรื่องหน้าเบื้องต้น

  • บทความนี้ไม่ได้รันโค้ดตัวอย่างในเล่ม

แหล่งอ้างอิง

  • The Art of R Programming · No Starch Press · คำอธิบาย สารบัญ วันที่ตีพิมพ์ จำนวนหน้า และประวัติผู้เขียน

  • Chapter 3: Matrices and Arrays (PDF) · No Starch Press · บทที่ 3 ทั้งบท หน้า 59–83

  • Open Library: 9781593273842 · Internet Archive · ข้อมูลฉบับ สำนักพิมพ์ และเลขหน้า

  • ปกหนังสือ The Art of R Programming

    The Art of R Programming

    Norman Matloff

    สารบัญ 16 บทครอบคลุมโครงสร้างข้อมูล OOP debugging การเพิ่มสมรรถนะ การเชื่อม R กับ C/C++ และ Python และ parallel R

    ดูรายละเอียด

บทความนี้อ่านจบได้ในตัวเอง หนังสือด้านบนคือจุดต่อยอดสำหรับผู้ที่ต้องการศึกษาลึกขึ้น