原因是基于 methods for summary 以及调用哪个方法 .
methods('summary')
#[1] summary.aov summary.aovlist* summary.aspell*
#[4] summary.check_packages_in_dir* summary.connection summary.data.frame
#[7] summary.Date summary.default summary.ecdf*
#[10] summary.factor summary.glm summary.infl*
#[13] summary.lm summary.loess* summary.manova
#[16] summary.matrix summary.mlm* summary.nls*
#[19] summary.packageStatus* summary.PDF_Dictionary* summary.PDF_Stream*
#[22] summary.POSIXct summary.POSIXlt summary.ppr*
#[25] summary.prcomp* summary.princomp* summary.proc_time
#[28] summary.srcfile summary.srcref summary.stepfun
#[31] summary.stl* summary.table summary.tukeysmooth*
通常在 factor 类上调用 summary.factor ,但如果它是 character ,则调用 summary.default 并根据 summary.default 中的条件调用
if (is.factor(object))
return(summary.factor(object, ...))
.
.
.
else if (is.recursive(object) && !is.language(object) &&
(n
sumry
"Class", "Mode")))
.
.
else c(Length = length(object), Class = class(object), Mode = mode(object))
.
.
它返回'Length','Class'和'Mode' .
一种选择是将列专门转换为 factor 然后使用 summary 或调用 summary.factor
class(sn$Gender)
#[1] "character"
summary(sn$Gender)
#Length Class Mode
# 202 character character
summary.factor(sn$Gender)
# female male
# 93 109
但是,我们可以避免这种混乱并使用 table(sn$Gender)
数据
set.seed(24)
sn
replace = TRUE), stringsAsFactors = FALSE)