table 和 ftable 有何不同?
How do table and ftable differ?
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 array
dim(tbl1)
#[1] 3 2 2 3
dim(ftbl1)
#[1] 12 3
请注意,它们都是 array
,一个 array
也是一个具有某些 dim
属性的 vector
。
两者都不是 list
。正是这些属性使它们与众不同,以及它们的排列方式。例如如果我们删除属性,它们只是 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
参数
table(...,
exclude = if (useNA == "no") c(NA, NaN),
useNA = c("no", "ifany", "always"),
dnn = list.names(...), deparse.level = 1)
而?ftable
ftable(..., exclude = c(NA, NaN), row.vars = NULL,
col.vars = NULL)
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 array
dim(tbl1)
#[1] 3 2 2 3
dim(ftbl1)
#[1] 12 3
请注意,它们都是 array
,一个 array
也是一个具有某些 dim
属性的 vector
。
两者都不是 list
。正是这些属性使它们与众不同,以及它们的排列方式。例如如果我们删除属性,它们只是 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
参数
table(..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", "ifany", "always"), dnn = list.names(...), deparse.level = 1)
而?ftable
ftable(..., exclude = c(NA, NaN), row.vars = NULL, col.vars = NULL)