ftable
的文档告诉我们';ftable
创建'扁平'列联表"。然而,我并没有理解这句话的意思。我在下面放置了两个例子,但它们看起来非常相似,以至于我觉得我完全忽略了table
和ftable
之间的区别。我是否忽视了一些重要的编程或统计概念?
> 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
注意它们都是array
s,并且array
也是具有某些dim
属性的vector
。
都不是list
s。使它们不同的是它们的属性以及它们的排列方式。例如,如果我们删除属性,它们只是按不同的值顺序排列的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)