blob: 778dc9c1e9649085c74d22bf1b3391754ae6ac54 [file] [log] [blame]
# File src/library/base/R/colSums.R
# Part of the R package, https://www.R-project.org
#
# Copyright (C) 1995-2015 The R Core Team
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# A copy of the GNU General Public License is available at
# https://www.R-project.org/Licenses/
## NB: we now have implicitGeneric() on these,
## in ../../methods/R/makeBasicFunsList.R
colSums <- function(x, na.rm = FALSE, dims = 1L)
{
if(is.data.frame(x)) x <- as.matrix(x)
if(!is.array(x) || length(dn <- dim(x)) < 2L)
stop("'x' must be an array of at least two dimensions")
if(dims < 1L || dims > length(dn) - 1L)
stop("invalid 'dims'")
n <- prod(dn[id <- seq_len(dims)])
dn <- dn[-id]
z <- if(is.complex(x))
.Internal(colSums(Re(x), n, prod(dn), na.rm)) +
1i * .Internal(colSums(Im(x), n, prod(dn), na.rm))
else .Internal(colSums(x, n, prod(dn), na.rm))
if(length(dn) > 1L) {
dim(z) <- dn
dimnames(z) <- dimnames(x)[-id]
} else names(z) <- dimnames(x)[[dims+1L]]
z
}
colMeans <- function(x, na.rm = FALSE, dims = 1L)
{
if(is.data.frame(x)) x <- as.matrix(x)
if(!is.array(x) || length(dn <- dim(x)) < 2L)
stop("'x' must be an array of at least two dimensions")
if(dims < 1L || dims > length(dn) - 1L)
stop("invalid 'dims'")
n <- prod(dn[id <- seq_len(dims)])
dn <- dn[-id]
z <- if(is.complex(x))
.Internal(colMeans(Re(x), n, prod(dn), na.rm)) +
1i * .Internal(colMeans(Im(x), n, prod(dn), na.rm))
else .Internal(colMeans(x, n, prod(dn), na.rm))
if(length(dn) > 1L) {
dim(z) <- dn
dimnames(z) <- dimnames(x)[-id]
} else names(z) <- dimnames(x)[[dims+1L]]
z
}
rowSums <- function(x, na.rm = FALSE, dims = 1L)
{
if(is.data.frame(x)) x <- as.matrix(x)
if(!is.array(x) || length(dn <- dim(x)) < 2L)
stop("'x' must be an array of at least two dimensions")
if(dims < 1L || dims > length(dn) - 1L)
stop("invalid 'dims'")
p <- prod(dn[-(id <- seq_len(dims))])
dn <- dn[id]
z <- if(is.complex(x))
.Internal(rowSums(Re(x), prod(dn), p, na.rm)) +
1i * .Internal(rowSums(Im(x), prod(dn), p, na.rm))
else .Internal(rowSums(x, prod(dn), p, na.rm))
if(length(dn) > 1L) {
dim(z) <- dn
dimnames(z) <- dimnames(x)[id]
} else names(z) <- dimnames(x)[[1L]]
z
}
rowMeans <- function(x, na.rm = FALSE, dims = 1L)
{
if(is.data.frame(x)) x <- as.matrix(x)
if(!is.array(x) || length(dn <- dim(x)) < 2L)
stop("'x' must be an array of at least two dimensions")
if(dims < 1L || dims > length(dn) - 1L)
stop("invalid 'dims'")
p <- prod(dn[-(id <- seq_len(dims))])
dn <- dn[id]
z <- if(is.complex(x))
.Internal(rowMeans(Re(x), prod(dn), p, na.rm)) +
1i * .Internal(rowMeans(Im(x), prod(dn), p, na.rm))
else .Internal(rowMeans(x, prod(dn), p, na.rm))
if(length(dn) > 1L) {
dim(z) <- dn
dimnames(z) <- dimnames(x)[id]
} else names(z) <- dimnames(x)[[1L]]
z
}
.colSums <- function(x, m, n, na.rm = FALSE)
.Internal(colSums(x, m, n, na.rm))
.colMeans <- function(x, m, n, na.rm = FALSE)
.Internal(colMeans(x, m, n, na.rm))
.rowSums <- function(x, m, n, na.rm = FALSE)
.Internal(rowSums(x, m, n, na.rm))
.rowMeans <- function(x, m, n, na.rm = FALSE)
.Internal(rowMeans(x, m, n, na.rm))