อะไรคือความแตกต่างระหว่างชนิดข้อมูลเวกเตอร์และรายการใน R


127

อะไรคือความแตกต่างหลักระหว่างชนิดข้อมูลเวกเตอร์และรายการใน R ข้อดีหรือข้อเสียของการใช้ (หรือไม่) ข้อมูลทั้งสองประเภทนี้คืออะไร?

ฉันขอขอบคุณที่เห็นตัวอย่างที่แสดงให้เห็นถึงกรณีการใช้งานของประเภทข้อมูล

คำตอบ:


77

รายการทางเทคนิคคือเวกเตอร์แม้ว่าจะมีน้อยมากที่จะใช้คำนั้น "list" เป็นหนึ่งในหลายโหมดโดยโหมดอื่น ๆ จะเป็น "ตรรกะ" "อักขระ" "ตัวเลข" "จำนวนเต็ม" สิ่งที่คุณเรียกว่าเวกเตอร์คือ "เวกเตอร์อะตอม" ในภาษา R แบบเข้มงวด:

 aaa <- vector("list", 3)
 is.list(aaa)   #TRUE
 is.vector(aaa)  #TRUE

รายการเป็นประเภท "วนซ้ำ" (ของเวกเตอร์) ในขณะที่เวกเตอร์อะตอมไม่ใช่:

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE

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

นอกจากนี้ยังมีข้อแม้ที่is.vectorฟังก์ชันจะกลับมาFALSEเมื่อมีแอตทริบิวต์อื่นที่ไม่ใช่ชื่อ ดูเวกเตอร์คืออะไร


54

รายการเป็นแบบ "เรียกซ้ำ" ซึ่งหมายความว่าสามารถมีค่าประเภทต่างๆหรือแม้แต่รายการอื่น ๆ :

x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13))
x # print the list
x$values   # Get one element
x[["ids"]] # Another way to get an element
x$sub$foo  # Get sub elements
x[[c(3,2)]]  # Another way (gets 13)
str(x)     # A "summary" of the list's content

รายการถูกใช้ใน R เพื่อแสดงชุดข้อมูล: โดยพื้นฐานแล้วdata.frameคลาสคือรายการที่แต่ละองค์ประกอบเป็นคอลัมน์ของประเภทเฉพาะ

การใช้งานอีกอย่างหนึ่งคือเมื่อเป็นตัวแทนของโมเดล: ผลลัพธ์จากการlmส่งคืนรายการที่มีอ็อบเจ็กต์ที่มีประโยชน์มากมาย

d <- data.frame(a=11:13, b=21:23)
is.list(d) # TRUE
str(d)

m <- lm(a ~ b, data=d)
is.list(m) # TRUE
str(m)

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


20

ในฐานะคนที่เพิ่งเข้าสู่ R แต่มาจากพื้นหลัง C / Java / Ruby / PHP / Python นี่คือวิธีที่ฉันคิด

A listเป็นอาร์เรย์ + แฮชแมปจริงๆ มันเป็นอาร์เรย์ PHP ที่เชื่อมโยงกัน

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'

A vectorคืออาร์เรย์ / รายการประเภทคงที่ คิดว่ามันเหมือนรายการที่เชื่อมโยง - เนื่องจากการใส่รายการที่ไม่เหมือนกันลงในรายการที่เชื่อมโยงนั้นเป็นการต่อต้านรูปแบบใด ๆ มันเป็นเวกเตอร์ในความหมายเดียวกับที่หน่วย SIMD / MMX / เวกเตอร์ใช้คำนี้


3
คุณสามารถมีkeys ในเวกเตอร์ได้โดยใช้namesเมธอด
gokul_uf

9

คำถามเบื้องต้นที่คล้ายกันนี้มีคำตอบในhttp://www.burns-stat.com/pages/Tutor/hints_R_begin.html

หมายถึงการแนะนำอย่างนุ่มนวลที่จะช่วยให้คุณเริ่มต้นใช้งาน R ได้เร็วที่สุด ประสบความสำเร็จในระดับหนึ่ง

--- แก้ไข: -

ความพยายามที่จะอธิบายเพิ่มเติม อ้างจากข้อมูลอ้างอิงข้างต้น

เวกเตอร์อะตอม

เวกเตอร์อะตอมมีสามแบบที่คุณน่าจะพบ:

  • “ตัวเลข”
  • “ตรรกะ”
  • “ตัวอักษร”

สิ่งที่ต้องจำเกี่ยวกับเวกเตอร์อะตอมคือองค์ประกอบทั้งหมดในนั้นเป็นเพียงประเภทเดียว

รายการ

รายการสามารถมีรายการประเภทต่างๆในส่วนประกอบต่างๆ ส่วนประกอบของรายการได้รับอนุญาตให้เป็นรายการอื่นเวกเตอร์อะตอม (และสิ่งอื่น ๆ )

โปรดดูที่ลิงค์นี้ด้วย


2
โหวตลดลง: อย่างน้อยคุณควรชี้ให้เราไปที่ส่วนเฉพาะของเว็บไซต์นั้นซึ่งตอบคำถามเดิมได้
nbro

2

รายการประกอบด้วยข้อมูลหลายประเภทเช่นอักขระตัวเลขตรรกะและอื่น ๆ แต่เวกเตอร์มีเฉพาะข้อมูลประเภทเดียวกัน สำหรับอดีต:

scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)

สำหรับรายชื่อ:

mylist <- list(scores,student,sc_log)
# search for class of mylist vector 
#check structure of mylist using str() function.
str(mylist)
[1] list of 3
[1] $:num [1:4] 20 30 40 50
[2] $:chr [1:4] "A""B""C""D"
[3] $:log [1:4] TRUE FALSE FALSE TRUE

ซึ่งหมายถึงรายการที่มีข้อมูลหลายประเภทเช่นตัวเลขอักขระและตรรกะใน mylist แต่ในเวกเตอร์จะมีประเภทข้อมูลเดียวขององค์ประกอบทั้งหมดในเวกเตอร์นั้น

สำหรับอดีต:

สำหรับเวกเตอร์:

vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"

#which means all elements of vector containing single data type that is numeric only.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.