อะไรคือความแตกต่างหลักระหว่างชนิดข้อมูลเวกเตอร์และรายการใน R ข้อดีหรือข้อเสียของการใช้ (หรือไม่) ข้อมูลทั้งสองประเภทนี้คืออะไร?
ฉันขอขอบคุณที่เห็นตัวอย่างที่แสดงให้เห็นถึงกรณีการใช้งานของประเภทข้อมูล
อะไรคือความแตกต่างหลักระหว่างชนิดข้อมูลเวกเตอร์และรายการใน R ข้อดีหรือข้อเสียของการใช้ (หรือไม่) ข้อมูลทั้งสองประเภทนี้คืออะไร?
ฉันขอขอบคุณที่เห็นตัวอย่างที่แสดงให้เห็นถึงกรณีการใช้งานของประเภทข้อมูล
คำตอบ:
รายการทางเทคนิคคือเวกเตอร์แม้ว่าจะมีน้อยมากที่จะใช้คำนั้น "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
เมื่อมีแอตทริบิวต์อื่นที่ไม่ใช่ชื่อ ดูเวกเตอร์คืออะไร
รายการเป็นแบบ "เรียกซ้ำ" ซึ่งหมายความว่าสามารถมีค่าประเภทต่างๆหรือแม้แต่รายการอื่น ๆ :
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)
เวกเตอร์อะตอม (ไม่ใช่รายการเหมือน แต่เป็นตัวเลขตรรกะและอักขระ) มีประโยชน์เนื่องจากองค์ประกอบทั้งหมดเป็นชนิดเดียวกัน สิ่งนี้ทำให้การจัดการพวกมันรวดเร็วมาก
ในฐานะคนที่เพิ่งเข้าสู่ 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 / เวกเตอร์ใช้คำนี้
คำถามเบื้องต้นที่คล้ายกันนี้มีคำตอบในhttp://www.burns-stat.com/pages/Tutor/hints_R_begin.html
หมายถึงการแนะนำอย่างนุ่มนวลที่จะช่วยให้คุณเริ่มต้นใช้งาน R ได้เร็วที่สุด ประสบความสำเร็จในระดับหนึ่ง
--- แก้ไข: -
ความพยายามที่จะอธิบายเพิ่มเติม อ้างจากข้อมูลอ้างอิงข้างต้น
เวกเตอร์อะตอม
เวกเตอร์อะตอมมีสามแบบที่คุณน่าจะพบ:
- “ตัวเลข”
- “ตรรกะ”
- “ตัวอักษร”
สิ่งที่ต้องจำเกี่ยวกับเวกเตอร์อะตอมคือองค์ประกอบทั้งหมดในนั้นเป็นเพียงประเภทเดียว
รายการ
รายการสามารถมีรายการประเภทต่างๆในส่วนประกอบต่างๆ ส่วนประกอบของรายการได้รับอนุญาตให้เป็นรายการอื่นเวกเตอร์อะตอม (และสิ่งอื่น ๆ )
โปรดดูที่ลิงค์นี้ด้วย
รายการประกอบด้วยข้อมูลหลายประเภทเช่นอักขระตัวเลขตรรกะและอื่น ๆ แต่เวกเตอร์มีเฉพาะข้อมูลประเภทเดียวกัน สำหรับอดีต:
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.
key
s ในเวกเตอร์ได้โดยใช้names
เมธอด