ChatGPT解决这个技术问题 Extra ChatGPT

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

R中向量和列表数据类型之间的主要区别是什么?使用(或不使用)这两种数据类型的优点或缺点是什么?

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


I
IRTFM

从技术上讲,列表是向量,尽管很少有人会使用该术语。 “列表”是几种模式之一,其他模式是“逻辑”、“字符”、“数字”、“整数”。您所说的向量是严格的 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。请参阅:what is vector?


n
nbro

列表是“递归的”。这意味着它们可以包含不同类型的值,甚至是其他列表:

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

中使用列表来表示数据集: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)

原子向量(非列表,但数字、逻辑和字符)很有用,因为已知所有元素都具有相同的类型。这使得操作它们非常快。


C
ChrisF

作为一个刚接触 R,但来自 C/Java/Ruby/PHP/Python 背景的人,这就是我的想法。

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

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

vector 是固定类型的数组/列表。把它想象成一个链表——因为将不同的项目放入链表是一种反模式。它是一个向量,与 SIMD/MMX/向量单元使用这个词的意义相同。


您可以使用 names 方法在向量中包含 key
k
kgkmeekg

此问题和类似的介绍性问题在 http://www.burns-stat.com/pages/Tutor/hints_R_begin.html 中得到解答

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

- - 编辑: -

试图进一步解释;引用自上述参考资料。

原子向量 您可能会遇到三种原子向量: “数字” “逻辑” “字符” 关于原子向量要记住的一点是,它们中的所有元素都只是一种类型。列表列表可以在不同的组件中有不同类型的项目。列表的一个组件可以是另一个列表,一个原子向量(和其他东西)。

另请参阅 this 链接。


否决:您至少应该将我们指向该网站的特定部分,该部分回答了原始问题。
M
Mohammed H

列表包括多种数据类型,如字符、数字、逻辑等。但向量只包含相似类型的数据。例如:

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.