有人可以告诉我R之间的区别是什么:
foo <- array(list())
和
foo <- list()
我有这个疑问,因为我觉得我可以用同样的方式使用它们,所以我很想知道是否存在任何差异。先感谢您!
来自?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答案的补充:
虽然array
s是同质结构,但它们可以包含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
引用高级R中的Hadley Wickham:
R的基础数据结构可以按其维度(1d,2d,3d等)进行组织,以及它们是同构的(所有相同类型的内容)还是异构的(多种类型的内容)。这就产生了数据分析中使用的五种最常见的类型。
Homogeneous Heterogeneous
----------------------------------
1d Atomic Vector List
2d Matrix Data Frame
nd Array
使用此框架,数组和数据框之间的主要区别是:
韦翰。 H,Advanced R,第13页。