在R中,向量数据类型和列表数据类型有什么区别?



R中vector数据类型和list数据类型的主要区别是什么?使用(或不使用)这两种数据类型的优点或缺点是什么?

我希望看到演示数据类型用例的示例。

技术上来说,列表向量,尽管很少有人会使用这个术语。"list"是几种模式之一,其他模式还有"logical"、"character"、"numeric"、"integer"。你所说的向量在严格的R语言中是"原子向量":

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

列表是一种"递归"类型(向量),而原子向量不是:

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

根据数据对象是递归的、原子的还是具有维度属性(矩阵和数组),使用不同的函数处理数据对象。然而,我不确定讨论不同数据结构的"优点和缺点"对SO来说是一个足够集中的问题。为了补充Tommy所说的,除了列表能够容纳任意数量的其他向量之外,还有数据框架,它是一种特殊类型的列表,具有定义其结构的维度属性。与矩阵和数组不同的是,它们实际上是折叠的原子对象,数据框架可以保存不同的类型,包括因子类型。

还有一个警告,当有名称以外的属性时,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背景的人,以下是我对它的看法。

list实际上是一个数组+哈希映射。这是一个PHP关联数组

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

vector是一个固定类型的数组/列表。把它想象成一个链表——因为把不同的项放到一个链表中是一种反模式。它是一个矢量,就像SIMD/MMX/vector单位使用这个词一样。

这个问题和类似的介绍性问题在http://www.burns-stat.com/pages/Tutor/hints_R_begin.html

中有解答。

这是一个温和的介绍,让你尽快开始使用R。在某种程度上,它成功了。

——编辑:——

进一步解释的尝试;引用自上述参考文献

原子向量

原子向量有三种类型遇到:

    "数字"
  • "逻辑"
  • "字符"

关于原子向量要记住的是所有的元素其中只有一种类型

list在不同的组件中可以有不同类型的项。一个一个列表的组件可以是另一个列表,即原子向量(和其他事情)。

请参考此链接

list包含多种数据类型,如字符、数字、逻辑等,但vector只包含类似类型的数据。例:

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中,所有元素的数据类型都是单一的

for example:

向量:

vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"
#which means all elements of vector containing single data type that is numeric only.

最新更新