有人可以告诉我R之间的区别是什么:
foo <- array(list())
和
foo <- list()
我有这个疑问,因为我觉得我可以用同样的方式使用它们,所以我很想知道是否存在任何差异。 提前谢谢!
答案 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
使用此框架,数组和数据框之间的主要区别是:
韦翰。 H,高级R ,第13页。