Answers:
从技术上讲,列表是向量,尽管很少使用该术语。“列表”是几种模式之一,其他是“逻辑”,“字符”,“数字”,“整数”。用严格的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)
原子向量(非列表式,但数字,逻辑和字符)很有用,因为已知所有元素都具有相同的类型。这使得操作它们非常快。
在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中的多种数据类型,例如数字,字符和逻辑。但是在vector中,该vector中所有元素的数据类型都是单一的
例如:
对于矢量:
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
使用names
方法可以在向量中包含。