在R语言中,向量(vector)和列表(list)数据类型有哪些主要区别?使用这两种数据类型的优缺点是什么?
如果能提供演示这两种数据类型使用情况的示例,将不胜感激。
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
is.recursive(aaa) # TRUE
is.atomic(aaa) # 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)
原子向量(非列表形式,但是数值、逻辑和字符类型)非常有用,因为所有元素都被知道具有相同的类型。这使得对它们进行操作非常快速。
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
向量
是一种固定类型的数组/列表。可以将其视为链表 - 因为将不同类型的项放入链表中本身就是一种反模式。它与SIMD/MMX/向量单元使用该术语的含义相同。
此类问题及其简介可在http://www.burns-stat.com/pages/Tutor/hints_R_begin.html中得到解答。
该网站旨在为您提供尽可能快速的R入门介绍。 在某种程度上,它成功了。
--- 编辑:--
以下是对上述参考文献的进一步解释:
原子向量
你可能会遇到三种类型的原子向量:
- "numeric"(数值型)
- "logical"(逻辑型)
- "character"(字符型)
关于原子向量的重要一点是,其中的所有元素都只属于一种类型。
列表
列表可以具有不同类型的不同组件。列表的一个组件可以是另一个列表、原子向量(和其他东西)。
请参考此链接。
列表包含多种数据类型,如字符、数字、逻辑等。但向量只包含相似类型的数据。
例如: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
vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"
#which means all elements of vector containing single data type that is numeric only.
names
方法可以在向量中设置键名key
。 - gokul_uf