นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
Network
Members · Following: 0 · Followed: 16

อ่าน: 1260
ความเห็น: 0

ก้าวย่าง ทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: KML vs R ยกที่ ๓

เรื่องราวของ list วัตถุ (object) ชิ้นหนึ่งในโปรแกรม R

เป้งงงงงๆๆๆๆๆ ยกที่ ๓ เริ่ม ณ บัดนี้

เนื่องจากสภาพแวดล้อมของโปรแกรม R เป็นแบบ object oriented หรือสิ่งต่างๆ ในหน่วยความจำของโปรแกรม R จะเป็นวัตถุ (Object) ที่จะต้องมีชื่อกำกับเสมอ และวัตถุเดียวกันสามารถตั้งชื่อได้หลายๆ ชื่อ จึงอาจจะมีข้อมูลเดียวกันซ้ำๆ กันหลายๆ ชุด (วัตถุชื่อต่างๆ กัน)

เราอาจจะคุ้นชินกับโปรแกรมวิเคราะห์ข้อมูลทางสถิติต่างๆ ที่ส่วนใหญ่แล้วจะเปิดแฟ้มข้อมูลขึ้นมาวิเคราะห์ข้อมูลได้เพียง ๑ แฟ้มข้อมูล ไม่สามารถเปิดแฟ้มข้อมูลขึ้นมามากกว่า ๑ แฟ้มข้อมูลได้ในเวลาเดียวกัน แต่สำหรับโปรแกรม R แล้วในสภาพแวดล้อมแบบโปรแกรม R นั้นสามารถที่จะใส่หรือบรรจุวัตถุชนิดต่างๆ เข้าไปได้มากมายในเวลาเดียวกัน

เช่นอาจจะมีกรอบข้อมูล (Data Frame) ที่เหมือนกันอยู่มากกว่า ๑ วัตถุโดยจะเก็บไว้ในวัตถุที่มีชื่อต่างกัน

เช่นวัตถุชื่อ test1 ที่เก็บข้อมูลพิกัด x, y ที่นำเข้าจากจากแฟ้มข้อมูล kml โดยฟังก์ชัน getKMLcoordinates() นั้น เราอาจจะสร้างวัตถุอีก ๑ วัตถุเพื่อเก็บข้อมูลทุกอย่างที่อยู่ภายในวัตถุ test1 หรือให้เข้าใจง่ายๆ ก็เหมือนกับการทำสำเนาแฟ้มข้อมูลเก็บไว้ในชื่อแฟ้มข้อมูลอื่นนั่นเอง

เช่นหากเราต้องการสร้างวัตถุอีก ๑ วัตถุ ที่ชื่อ test1.clone เพื่อบรรจุข้อมูลทุกอย่างที่บรรจุอยู่ในวัตถุ test1 สามารถทำได้โดยใช้คำสั่ง

test1.clone <- test1

คำอธิบายที่ง่ายที่สุดสำหรับคำสั่งข้างต้นคือ สร้างวัตถุ test1.cone โดยที่มีทุกสิ่งทุกอย่างเหมือนวัตถุ test1

หรือให้นำค่าต่างๆ ที่อยู่ใน test1 (ทางขวามือของเครื่องหมาย <-) มาใส่ใน test1.clone (ทางซ้ายมือของเครื่องหมาย <-)

เราสามารถใช้เครื่องหมาย = แทนเครื่องหมาย <- ได้แต่ไม่แนะนำให้ใช้

test1.clone = test1

test1.clone = test1 มีความหมายเหมือน test1.clone <- test1

หากเราใช้เครื่องหมาย = แทนเครื่องหมาย <- อาจจะสร้างความสับสนขึ้นมาได้เช่น อาจจะมีความหมายว่าเป็นการทดสอบตรรกว่า test1.clone เท่ากับ test1 หรือไม่ หรือการสร้าง test1.clone ให้มีลักษณะเดียวกับ test1 หรืออาจะสับสนว่าจะให้วัตถุอะไรเท่ากับวัตถุอะไร ระหว่างวัตถุที่อยู่ทางซ้ายมือหรือทางขวามือของเครื่องหมาย = 

แต่ถ้าเป็นเครื่องหมาย <- ก็จะหมายถึงให้ส่งค่าของวัตถุที่อยู่ทางขวามือของเครื่องหมาย <- ไป(เก็บไว้)ยังวัตถุที่อยู่ทางซ้ายมือของเครื่องหมาย <-

สภาพแวดล้อมการทำงานของ R เป็นสภาพแวดล้อมแบบเปิด R สามารถเชื่อมโยงกับภาษา C, C++ หรือ Fortran ได้ด้วย หรือแม้แต่ชุดคำสั่งในภาษา S สามารถนำมาใช้ได้กับโปรแกรม R เกือบทั้งหมด

R เป็นทั้งภาษาคอมพิวเตอร์และสภาพแวดล้อมในการคำนวณทางสถิติและกราฟฟิก โดยมีลักษณะและสภาพแวดล้อมคล้ายกับภาษา S

ภาษา S ถูกพัฒนาขึ้นโดย John Chambers ที่ห้องปฏิบัติการ Bell Laboratories  โดยมี Rick Becker และ Allan Wilks ร่วมพัฒนาในยุคหลัง

S พัฒนามาจาก Fortran สภาพแวดล้อม S เป็นพื้นฐานของโปรแกรมวิเคราะห์ทางสถิติทางการค้าที่มีชื่อว่า S-Plus นั่นเอง

R เป็นสภาพแวดล้อมที่พัฒนาจากแนวคิดแบบ Scheme โดยใช้ภาษา S ร่วมกับการกำหนดขอบเขตและความหมาย (ชื่อ) ของตัวแปร (lexical scoping semantics/ static scoping semantics) เฉพาะในฟังก์ชันนั้นๆ

Ross Ihaka และ Robert Gentleman พัฒนา R ขึ้นที่ University of Auckland ประเทศนิวซีแลนด์ และ R Development Core Team เป็นผู้พัฒนา R ในปัจจุบัน หนึ่งในสมาชิกของ R Development Core Team คือ John Chambers

R จึงเป็นชื่อที่ตั้งขึ้นด้วยเหตุผลหลัก ๒ ประการคือ ผู้สร้าง R ทั้ง ๒ คน มีชื่อหน้าว่า Ross และ Robert จึงเอาอักษร R ที่เป็นอักษรตัวแรกของผู้สร้างโปรแกรม R (ทั้งสองคน) มาตั้งชื่อ และอีกเหตุผลหนึ่งก็คือต้องการตั้งชื่อให้ล้อกับภาษา S

โลโก้ของโปรแกรม R คือ

(ภาพจาก en.wikipedia.org)

R เป็นส่วนหนึ่งของ GNU project

มาเข้าเรื่องบันทึกกันต่อดีกว่าครับ

ในครั้งที่แล้วผมใช้ฟังก์ชัน getKMLcoordinates(X) นำเข้าข้อมูลพิกัด x, y จากแฟ้มข้อมูลในรูปแบบ kml เก็บไว้ในวัตถุที่ชื่อ test1 ได้แล้วและแสดงให้โครงสร้างข้อมูลที่ที่เห็บไว้ในวัตถุที่ชื่อ test1 ไปคร่าวๆ แล้ว

หากเราใช้คำสั่ง plot(x) เพื่อวาด (สร้าง) แผนที่จากข้อมูลที่เก็บไว้ในวัตถุ test1 ผลลัพธ์ที่ได้จะเป็น

plot(test1)

Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' is a list, but does not have components 'x' and 'y'

ไม่สามารถใช้คำสั่ง plot(x) เพื่อสร้างแผนที่ได้ โดยแจ้งข้อความว่า x หรือในที่นี้คือวัตถุที่ชื่อ test1 มี class เป็น list และไม่ได้มีข้อมูลที่เป็นพิกัด x, y อยู่เลย

xy.coords(x,y, xlabel, ylabel, log) เป็นการใช้งานฟังก์ชัน xy.coords() ภายในคำสั่ง plot(x)

นั่นคือฟังก์ชัน getKMLcoordinates สามารถดึงข้อมูลพิกัดมาได้แต่ข้อมูลที่ดึงมาได้อยู่ในรูปของ list แทนที่จะอยู่ในรูปของ spatial data ดังนั้น plot() จึงไม่สารถสร้างแผนที่ขึ้นมาได้ เพราะไม่พบข้อมูลที่ระบุว่าเป็นพิกัด x, y

เรามาดูว่าภายในวัตถุ test1 มีข้อมูลอะไรบ้าง (นอกเหนือจากที่รู้ว่าเป็น list) ภายใน list ประกอบไปด้วยข้อมูลอะไร

ลองดูผลจากคำสั่งด้านล่างนะครับ

test1

[[1]]
     [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]      [,9]      [,10]     [,11]     [,12]     [,13]     [,14]     [,15]   
[1,] Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3

---
     [,61]     [,62]     [,63]     [,64]     [,65]     [,66]     [,67]     [,68]     [,69]
[1,] Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,0 NA  

[[2]]
     [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]      [,9]      [,10]     [,11]     [,12]     [,13]     [,14]     [,15]   
[1,] Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3

---
     [,91]     [,92]     [,93]     [,94]     [,95]     [,96]     [,97]     [,98]     [,99]     [,100]    [,101]    [,102]    [,103]    [,104]    [,105]    [,106]
[1,] Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,0 NA   

หรือ

test1[[1]]

     [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]      [,9]      [,10]     [,11]     [,12]     [,13]     [,14]     [,15]   
[1,] Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3
---
     [,61]     [,62]     [,63]     [,64]     [,65]     [,66]     [,67]     [,68]     [,69]
[1,] Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,3 Numeric,0 NA  

ลองทำความเข้าใจผลลัพธ์ที่ออกมากันก่อน

ผลลัพธ์ (พื้นหลังสีเขียว) ที่แสดงมีการตัดออกบางส่วนเพื่อกระชับข้อมูลและมีการตัดคำข้อมูลที่อยู่บรรทัดเดียวกันลงมาแสดงในอีกบรรทัดนึง หรือ ๑ แถว (บรรทัด) จะมีข้อมูลที่แสดง ๑๕ ชุด ([,1] ... [,15])

เราเอง


หมวดหมู่บันทึก: บริการวิชาการ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 22 มีนาคม 2555 15:33 แก้ไข: 22 มีนาคม 2555 15:47 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 ServiceMan.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 34.204.176.189
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ