Câu trả lời:
Về mặt kỹ thuật, danh sách là các vectơ, mặc dù rất ít người sử dụng thuật ngữ đó. "danh sách" là một trong một số chế độ, với các chế độ khác là "logic", "ký tự", "số", "số nguyên". Những gì bạn đang gọi vectơ là "vectơ nguyên tử" theo cách nói của R nghiêm ngặt:
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
Danh sách là loại "đệ quy" (của vectơ) trong khi vectơ nguyên tử không phải là:
is.recursive(aaa) # TRUE
is.atomic(aaa) # FALSE
Bạn xử lý các đối tượng dữ liệu với các chức năng khác nhau tùy thuộc vào việc chúng thuộc tính đệ quy, nguyên tử hay có các thuộc tính chiều (ma trận và mảng). Tuy nhiên, tôi không chắc rằng một cuộc thảo luận về "ưu điểm và nhược điểm" của các cấu trúc dữ liệu khác nhau là một câu hỏi đủ tập trung cho SO. Để thêm vào những gì Tommy đã nói, bên cạnh các danh sách có khả năng chứa một số lượng tùy ý các vectơ khác, còn có các khung dữ liệu là một loại danh sách cụ thể có thuộc tính chiều xác định cấu trúc của nó. Không giống như ma trận và mảng là những đối tượng nguyên tử thực sự được gấp lại, khung dữ liệu có thể chứa nhiều kiểu khác nhau bao gồm cả kiểu yếu tố.
Ngoài ra còn có cảnh báo rằng is.vector
hàm sẽ trả về FALSE
khi có các thuộc tính khác với tên. Xem: vectơ là gì?
Danh sách là "đệ quy". Điều này có nghĩa là chúng có thể chứa các giá trị thuộc các loại khác nhau, thậm chí cả các danh sách khác:
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
Danh sách được sử dụng trong R để biểu diễn các tập dữ liệu: data.frame
lớp về cơ bản là một danh sách trong đó mỗi phần tử là một cột của một kiểu cụ thể.
Một cách sử dụng khác là khi biểu diễn một mô hình: kết quả từ lm
trả về một danh sách chứa một loạt các đối tượng hữu ích.
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)
Các vectơ nguyên tử (không giống như danh sách, nhưng là số, lôgic và ký tự) rất hữu ích vì tất cả các phần tử được biết là có cùng kiểu. Điều này làm cho việc thao tác chúng rất nhanh chóng.
Là một người mới làm quen với R, nhưng xuất thân từ nền tảng C / Java / Ruby / PHP / Python, đây là cách tôi nghĩ về nó.
A list
thực sự là một mảng + một bản đồ băm. Đó là một mảng kết hợp PHP.
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
A vector
là một mảng / danh sách kiểu cố định. Hãy coi nó giống như một danh sách được liên kết - bởi vì việc đặt các mục không giống nhau vào một danh sách được liên kết là một cách chống lại khuôn mẫu. Đó là một vectơ theo nghĩa giống như các đơn vị SIMD / MMX / vectơ sử dụng từ này.
Câu hỏi này và các câu hỏi giới thiệu tương tự được trả lời trong http://www.burns-stat.com/pages/Tutor/hints_R_begin.html
Nó có nghĩa là một phần giới thiệu nhẹ nhàng giúp bạn bắt đầu và sử dụng R nhanh nhất có thể. Ở một mức độ nào đó nó thành công.
--- Biên tập: --
Cố gắng giải thích thêm; trích dẫn từ tài liệu tham khảo trên.
Vectơ nguyên tử
Có ba loại vector nguyên tử mà bạn có thể gặp phải:
- "Số"
- "hợp lý"
- "tính cách"
Điều cần nhớ về vectơ nguyên tử là tất cả các phần tử trong chúng chỉ thuộc một loại.
Danh sách
Danh sách có thể có nhiều loại mục khác nhau trong các thành phần khác nhau. Một thành phần của danh sách được phép là một danh sách khác, một vectơ nguyên tử (và những thứ khác).
Vui lòng tham khảo liên kết này .
danh sách bao gồm nhiều kiểu dữ liệu như ký tự, số, lôgic et. nhưng vector chỉ chứa loại dữ liệu tương tự. cho người yêu cũ:
scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)
cho danh sách:
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
có nghĩa là danh sách chứa nhiều kiểu dữ liệu như số, ký tự và lôgic trong danh sách của tôi. Nhưng trong vectơ sẽ có một kiểu dữ liệu duy nhất của tất cả các phần tử trong vectơ đó
cho người yêu cũ:
cho vectơ:
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 trong vectơ bằng cách sử dụngnames
phương pháp này.