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

时间:2017-12-19 11:39:25

标签: r

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

foo <- array(list())

foo <- list()

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

2 个答案:

答案 0 :(得分:4)

来自?array

  

R中的数组可以包含一个,两个或更多个维度。这很简单        一个存储有附加属性的向量        维度(属性'&#34; dim&#34;')以及可选的名称        尺寸(属性'&#34; dimnames&#34;')。

确实你可以检查:

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的回答:

虽然array同构结构,但它们可以包含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 :(得分:1)

高级R中引用Hadley Wickham:

  

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

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

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

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

    韦翰。 H,高级R ,第13页。