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

Our Shangri-La
Ico64
Kittisakdi Choomalee

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

อ่าน: 1239
ความเห็น: 3

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

วัตถุชั้น matrix ของ R

กลับมาพบกันอีกครั้งนะครับกับเรื่องราชวนปวดหัวของ R

ผมคิดอยู่ว่าไม่ต้องเขียนยากๆ เขียนเรื่องราวให้ปวดหัวทั้งคนเขียนคนอ่านไม่ดีกว่าหรือ เอาแค่คำสั่งอย่างเดียวก้พอแล้ว ไม่ต้องไปรื้อไปล้วงอะไรให้เวียนหัวตาลายกัน

ถ้าต้องการทำแบบนี้เอาคำสั่งนี้ไปใช้ หรือขั้นตอนของการจัดการมี ๑ ๒ ๓ .. จบ ดีกว่ามั๊ย

คิดอีกทีสำหรับคนที่หลวมตัวเข้ามาอ่านบางท่านอาจจะนำไปใช้ประโยชน์ได้มากกว่าแค่รู้ว่าถ้าจะทำอย่างนี้ใช้คำสั่งแบบนี้จบ

เขียนเอาไว้นิดๆ หน่อยๆ เป็นบันทึกกันลืมเอาไว้ก็แล้วกันครับ หากต้องการทำความเข้าใจ เรียนรู้ R ให้ทะลุปรุโปร่งก็ต้องเรียนรู้ข้อมูลพื้นฐานเกี่ยวกับ R เอาไว้บ้าง

ครั้งที่แล้วเราทำความรู้จักกับเวคเตอร์ตัวเลข (numeric vector) ไปกันแล้ว คราวนี้เรามาดูข้อมูลแบบอื่นๆ ของ R กันบ้างนะครับ

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

ผมคงไม่นำผลลัพธ์มานำเสนอในที่นี้แล้วนะครับ คงต้องย้อนกลับไปดูกันเอาเองในบันทึกก่อน หรือใครจะเปิดโปรแกรม R แล้วทำไปพร้อมๆ กันก็ได้นะครับ หากต้องการ ^_^

คำสั่งที่ให้ผลลัพธ์เป็น matrix คือคำสั่ง test1[[1]] และคำสั่ง test1[[1]][]

คราวนี้เรามาทำความรู้จักกับ matrix กันสักนิดนะครับ

ก่อนที่จะรู้จักกับ matrix เรามารู้จักกับวัตถุอีกวัตถุหนึ่งในโปรแกรม R กันก่อนนะครับ วัตถุที่ว่าคือ อาเรย์ (Array)

อาเรย์ก็คือเวคเตอร์ที่มีมิตินั่นเอง แต่หากอาเรย์มีมิติเพียง ๒ มิติจะมีชื่อเรียกพิเศษว่า เมตริกซ์ (matrix)

ตัวอย่างที่ง่ายที่สุดของ matrix ก็คือตาราง

ตารางประกอบไปด้วยข้อมูล ๒ ส่วนคือ ข้อมูลที่เป็นสดมภ์ (column) และแถว (row)

ลองดูตัวอย่างดังต่อไปนี้

> x <- c(1:20)
> x
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
> class(x)
[1] "integer"
> dim(x) <- c(5,4)
> x
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20
> class(x)
[1] "matrix"
> x<- t(x)
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20

คราวนี้เรามาดูกันว่าข้างต้นมีคำสั่งอะไรบ้าง

  • เริ่มจากให้ x มีค่าตั้งแต่ 1 ถึง 20 (x <- c(1:20))
  • แสดงค่าที่อยู๋ภายในวัตถุ x (x)
  • ตรวจสอบชั้น (class) ของ x (class(x))
  • โปรแกรม R ส่งค่ากลับมาแจ้งว่าวัตถุ x มี class เป็น integer หรือเป็นเวคเตอร์จำนวนเต็ม
  • เปลี่ยน x เป็นอาเรย์ ๒ มิติ โดยให้มี ๕ แถว ๔ สดมภ์ โดยที่จำนวนแถวคูณด้วยจำนวนสดมภ์ต้องเท่ากับจำนวนข้อมูลที่อยู่ภายในวัตถุ x หรือวัตถุที่ต้องการเปลี่ยนให้เป็นอาเรย์ (dim(x) <- c(5,4))
  • แสดงค่าที่อยู่ภายในวัตถุ x (x) จะเห็นว่า จากข้อมูลที่เรียงต่อกันจาก ๑ - ๒๐ กลายมาเป็นข้อมูลที่มี ๕ แถว ๔ สดมภ์
  • ตรวจสอบชั้น (class) ของ x (class(x))
  • โปรแกรม R ส่งค่ากลับมาแจ้งว่าวัตถุ x มี class เป็น matrix หรืออาเรย์ ๒ มิตินั่นเอง
  • เราจะเห็นว่าการเปลี่ยนจากเวคเตอร์จำนวนเต็มให้เป็นอาเรย์นั้น โปรแกรม R จะมีการเรียงลำดับข้อมูลในแนวแถวก่อน นั่นคือ เลข 1 - 5 ถูกจัดเรียงเป็นสดมภ์แรก (มี ๕ แถว) แล้วไปจัดเรียงแถวใหม่ในสดมภ์ที่ ๒ จนครบทั้ง ๔ สดมภ์ ดังนั้นหากเราต้องการให้เรียงข้อมูลในแนวสดมภ์ก่อนเราต้องทำการ transpose ข้อมูลในวัตถุ x (t(x)) แล้วจัดเก็บไว้ในวัตถุ x เเหมือนเดิม (x <- t(x))
  • เมื่อสั่งให้แสดงค่าที่อยู่ในวัตถุ x จะเห็นว่าตอนนี้อาเรย์จะกลายเป็น ๔ แถว ๕ สดมภ์ และการจัดเรียงข้อมูลเป้นไปในแนวสดมภ์ก่อน หรือเรียงข้อมูลในแถวแรกให้ครบ ๕ สดมภ์ก่อนแล้วค่อยไปจัดเรียงข้อมูลในแถวถัดไป

เรามาลองดูข้อมูลนี้สักนิดนะครับ

> x

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20

การอ้างอิงใน matrix จะใช้แถวและสดมภ์ในการอ้างอิง เช่น 9 ในวัตถุ x จะมีตำแหน่งอ้างอิงใน matrix เป็น x[2,4] หรือ 9 อยู่ในแถวที่ 2 สดมภ์ที่ 4 หรือจะกล่าวอีกอย่างว่าข้อมูลที่อยู่ในตำแหน่งแถวที่ 2 สดมภ์ที่ 4 ของวัตถุ x คือ 9 ซึ่งเขียนแทนด้วย x[2,4]

เมื่อลองหาค่าในตำแหน่งข้างต้นภายในวัตถุ x ก็จะได้คำตอบเป็น

> x[2,4]
[1] 9

ผมให้ดูผลจากคำสั่งอีกนิดนะครับ

> x2 <- c(1.1, 2.2, 3.1, 4.5, 5.2, 6.1)
> x2
[1] 1.1 2.2 3.1 4.5 5.2 6.1
> class(x2)
[1] "numeric"

  • ให้วัตถุ x2 มีค่าเป็น 1.1 2.2 3.1 4.5 5.2 และ 6.1 ตามลำดับ
  • แสดงค่าที่เก็บในวัตถุ x2
  • ตรวจสอบ class ของวัตถุ x2
  • โปรแกรม R แจ้งว่าวัตถุ x2 มี class เป็น numeric หรือเวคเตอร์ตัวเลข

เป็นยังไงกันบ้างครับคงไม่งงนะครับ

คำสั่งในบันทึกก่อนหน้านี้ที่เมื่อสั่งให้แสดงข้อมูลที่เก็บในวัตถุ test1 ในตำแหน่งที่ระบุแล้วให้ผลลัพธ์ออกมามี class เป็น matrix คือคำสั่ง

test1[[1]] และคำสั่ง test1[[1]][]

พบกันใหม่บันทึกหน้านะครับ

เราเอง

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

บันทึกอื่นๆ

ความเห็น

เป็นบันทึกกันลืมที่ดีครับ (ฮา)

เขียนไปเขียนมาทำท่าจะลืมเหมือนกันครับ

อิอิอิ

เราเอง

บันทึกกันลืม ที่ทำให้ไม่ลืมกันครับ

 

เอิ้ก เอิ้ก

 

"ใจสั่งมา"

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

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