statList
provides a general method for calculating univariate or
multivariate statistics for a matrix or data.frame stratified by one or more
factors.
Arguments
- X
A matrix or data frame containing the variables to be summarized
- factors
A vector, matrix or data frame containing the factors for which
X
is to be summarized. Iffactors
is not specified, the result is calculated for all of the data inX
.- FUN
A function to be applied to the pieces of
X
, as split byfactors
.- drop
Logical, indicating whether empty levels of
factors
are to be dropped from the result.- ...
Other arguments, passed to
FUN
.
Value
Returns a list of items corresponding to the unique elements in
factors
, or the interaction of factors
. Each item is the
result of applying FUN
to that collection of rows of X
. The
items are named according to the levels in factors
.
Details
statList
is the general function. X
is first split
by
factors
, and FUN
is applied to the result.
colMeansList
and covList
are just calls to statList
with the appropriate FUN
.
Examples
# grand means
statList(iris[,1:4], FUN=colMeans)
#> [[1]]
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.843333 3.057333 3.758000 1.199333
#>
# species means
statList(iris[,1:4], iris$Species, FUN=colMeans)
#> $setosa
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.006 3.428 1.462 0.246
#>
#> $versicolor
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.936 2.770 4.260 1.326
#>
#> $virginica
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 6.588 2.974 5.552 2.026
#>
# same
colMeansList(iris[,1:4], iris$Species)
#> $setosa
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.006 3.428 1.462 0.246
#>
#> $versicolor
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.936 2.770 4.260 1.326
#>
#> $virginica
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 6.588 2.974 5.552 2.026
#>
# var-cov matrices, by species
covList(iris[,1:4], iris$Species)
#> $setosa
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> Sepal.Length 0.12424898 0.099216327 0.016355102 0.010330612
#> Sepal.Width 0.09921633 0.143689796 0.011697959 0.009297959
#> Petal.Length 0.01635510 0.011697959 0.030159184 0.006069388
#> Petal.Width 0.01033061 0.009297959 0.006069388 0.011106122
#>
#> $versicolor
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> Sepal.Length 0.26643265 0.08518367 0.18289796 0.05577959
#> Sepal.Width 0.08518367 0.09846939 0.08265306 0.04120408
#> Petal.Length 0.18289796 0.08265306 0.22081633 0.07310204
#> Petal.Width 0.05577959 0.04120408 0.07310204 0.03910612
#>
#> $virginica
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> Sepal.Length 0.40434286 0.09376327 0.30328980 0.04909388
#> Sepal.Width 0.09376327 0.10400408 0.07137959 0.04762857
#> Petal.Length 0.30328980 0.07137959 0.30458776 0.04882449
#> Petal.Width 0.04909388 0.04762857 0.04882449 0.07543265
#>
# multiple factors
iris$Dummy <- sample(c("Hi","Lo"),150, replace=TRUE)
colMeansList(iris[,1:4], iris[,5:6])
#> $setosa.Hi
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 4.930769 3.342308 1.476923 0.250000
#>
#> $versicolor.Hi
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.884 2.720 4.208 1.308
#>
#> $virginica.Hi
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 6.658333 3.008333 5.625000 2.066667
#>
#> $setosa.Lo
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.0875000 3.5208333 1.4458333 0.2416667
#>
#> $versicolor.Lo
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 5.988 2.820 4.312 1.344
#>
#> $virginica.Lo
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 6.523077 2.942308 5.484615 1.988462
#>