r语言 - table和ftable有什么不同?



ftable的文档告诉我们';ftable创建'扁平'列联表"。然而,我并没有理解这句话的意思。我在下面放置了两个例子,但它们看起来非常相似,以至于我觉得我完全忽略了tableftable之间的区别。我是否忽视了一些重要的编程或统计概念?

> ftable(mtcars[c("cyl", "vs", "am", "gear")])
gear  3  4  5
cyl vs am              
4   0  0        0  0  0
1        0  0  1
1  0        1  2  0
1        0  6  1
6   0  0        0  0  0
1        0  2  1
1  0        2  2  0
1        0  0  0
8   0  0       12  0  0
1        0  0  2
1  0        0  0  0
1        0  0  0
> table(mtcars[c("cyl", "vs", "am", "gear")])
, , am = 0, gear = 3
vs
cyl  0  1
4  0  1
6  0  2
8 12  0
, , am = 1, gear = 3
vs
cyl  0  1
4  0  0
6  0  0
8  0  0
, , am = 0, gear = 4
vs
cyl  0  1
4  0  2
6  0  2
8  0  0
, , am = 1, gear = 4
vs
cyl  0  1
4  0  6
6  2  0
8  0  0
, , am = 0, gear = 5
vs
cyl  0  1
4  0  0
6  0  0
8  0  0
, , am = 1, gear = 5
vs
cyl  0  1
4  1  1
6  1  0
8  2  0

我怀疑它的意思是"平"。如"样式化嵌套列表",但如果是这种情况,那么我不确定为什么我不能向ftable提供与table完全相同的参数。例如,ftable(Titanic, row.vars = 1:3)是有效的,但table(Titanic, row.vars = 1:3)会因为参数长度不相等而抛出错误。

如果我们看一下结构,从dim属性可以明显看出

tbl1 <- table(mtcars[c("cyl", "vs", "am", "gear")])
str(tbl1)
'table' int [1:3, 1:2, 1:2, 1:3] 0 0 12 1 2 0 0 0 0 0 ...
- attr(*, "dimnames")=List of 4
..$ cyl : chr [1:3] "4" "6" "8"
..$ vs  : chr [1:2] "0" "1"
..$ am  : chr [1:2] "0" "1"
..$ gear: chr [1:3] "3" "4" "5"
ftbl1 <- ftable(mtcars[c("cyl", "vs", "am", "gear")])
str(ftbl1)
'ftable' int [1:12, 1:3] 0 0 1 0 0 0 2 0 12 0 ...
- attr(*, "row.vars")=List of 3
..$ cyl: chr [1:3] "4" "6" "8"
..$ vs : chr [1:2] "0" "1"
..$ am : chr [1:2] "0" "1"
- attr(*, "col.vars")=List of 1
..$ gear: chr [1:3] "3" "4" "5"

。flat table为2D,而table为4D数组

dim(tbl1)
#[1] 3 2 2 3
dim(ftbl1)
#[1] 12  3

注意它们都是arrays,并且array也是具有某些dim属性的vector

都不是lists。使它们不同的是它们的属性以及它们的排列方式。例如,如果我们删除属性,它们只是按不同的值顺序排列的vector

c(ftbl1)
#[1]  0  0  1  0  0  0  2  0 12  0  0  0  0  0  2  6  0  2  2  0  0  0  0  0  0  1  0  1  0  1  0  0  0  2  0  0
c(tbl1)
#[1]  0  0 12  1  2  0  0  0  0  0  0  0  0  0  0  2  2  0  0  2  0  6  0  0  0  0  0  0  0  0  1  1  2  1  0  0

检查是否为list

is.list(tbl1)
#[1] FALSE
is.list(ftbl1)
#[1] FALSE

关于table的错误,只是如果我们检查?table

,它没有row.vars参数

表(…exclude = if (useNA == "no") c(NA, NaN),useNA = c("no", "ifany", "always"),DNN = list.names(…),离开。Level = 1)

?ftable

ftable(…, exclude = c(NA, NaN), row。vars = NULL,color .vars = NULL)

最新更新