R中的数组(list())和list()之间的区别

问题描述 投票:3回答:2

有人可以告诉我R之间的区别是什么:

foo <- array(list())

foo <- list()

我有这个疑问,因为我觉得我可以用同样的方式使用它们,所以我很想知道是否存在任何差异。先感谢您!

r
2个回答
4
投票

来自?array

R中的数组可以具有一个,两个或更多个维度。它只是一个存储有附加属性的向量,这些属性给出了维度(属性“dim”')以及这些维度的可选名称(属性'“dimnames”')。

确实你可以检查:

foo <- array(list())
str(foo);
# list()
# - attr(*, "dim")= int 0
is.list(foo);
# [1] TRUE
is.array(foo);
# [1] TRUE


foo <- list()
str(foo);
# list()
is.list(foo);
# [1] TRUE
is.array(foo);
# [1] FALSE

所以array(list())是一个list,具有额外的dim属性。


为了回应@clemens,让我们举个不同的例子:

foo <- array(list(a = 1));
str(foo);
#List of 1
# $ : num 1
# - attr(*, "dim")= int 1

索引的工作方式与list相同:

foo[[1]];
#[1] 1

确实如此

is.list(foo);
#[1] TRUE

@ LenGreski答案的补充:

虽然arrays是同质结构,但它们可以包含list元素,每个元素可以包含多种类型(因为它们是不均匀的结构)。

例如,

foo <- array(list(a = 1, b = diag(3)));
sapply(foo, class)
#[1] "numeric" "matrix"
is.array(foo);
#[1] TRUE
is.list(foo);
#[1] TRUE

1
投票

引用高级R中的Hadley Wickham:

R的基础数据结构可以按其维度(1d,2d,3d等)进行组织,以及它们是同构的(所有相同类型的内容)还是异构的(多种类型的内容)。这就产生了数据分析中使用的五种最常见的类型。

    Homogeneous      Heterogeneous
----------------------------------
1d  Atomic Vector    List
2d  Matrix           Data Frame
nd  Array

使用此框架,数组和数据框之间的主要区别是:

  1. 当所有元素属于同一类型时,使用数组
  2. 数组可以有2个以上的维度
  3. 矩阵相当于二维数组

参考

韦翰。 H,Advanced R,第13页。

© www.soinside.com 2019 - 2024. All rights reserved.