| # File src/library/utils/R/head.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/ |
| |
| ### placed in the public domain 2002 |
| ### Patrick Burns patrick@burns-stat.com |
| ### |
| ### Adapted for negative arguments by Vincent Goulet |
| ### <vincent.goulet@act.ulaval.ca>, 2006 |
| |
| head <- function(x, ...) UseMethod("head") |
| |
| head.default <- function(x, n = 6L, ...) |
| { |
| stopifnot(length(n) == 1L) |
| n <- if (n < 0L) max(length(x) + n, 0L) else min(n, length(x)) |
| x[seq_len(n)] |
| } |
| |
| ## head.matrix and tail.matrix are now exported (to be used for other classes) |
| head.data.frame <- head.matrix <- function(x, n = 6L, ...) |
| { |
| stopifnot(length(n) == 1L) |
| n <- if (n < 0L) max(nrow(x) + n, 0L) else min(n, nrow(x)) |
| x[seq_len(n), , drop=FALSE] |
| } |
| head.table <- function(x, n = 6L, ...) { |
| (if(length(dim(x)) == 2L) head.matrix else head.default)(x, n=n) |
| } |
| |
| head.ftable <- function(x, n = 6L, ...) { |
| r <- format(x) |
| dimnames(r) <- list(rep.int("", nrow(r)), rep.int("", ncol(r))) |
| noquote(head.matrix(r, n = n + nrow(r) - nrow(x), ...)) |
| } |
| |
| head.function <- function(x, n = 6L, ...) |
| { |
| lines <- as.matrix(deparse(x)) |
| dimnames(lines) <- list(seq_along(lines),"") |
| noquote(head(lines, n=n)) |
| } |
| |
| tail <- function(x, ...) UseMethod("tail") |
| |
| tail.default <- function(x, n = 6L, ...) |
| { |
| stopifnot(length(n) == 1L) |
| xlen <- length(x) |
| n <- if (n < 0L) max(xlen + n, 0L) else min(n, xlen) |
| x[seq.int(to = xlen, length.out = n)] |
| } |
| |
| tail.data.frame <- function(x, n = 6L, ...) |
| { |
| stopifnot(length(n) == 1L) |
| nrx <- nrow(x) |
| n <- if (n < 0L) max(nrx + n, 0L) else min(n, nrx) |
| x[seq.int(to = nrx, length.out = n), , drop = FALSE] |
| } |
| |
| tail.matrix <- function(x, n = 6L, addrownums = TRUE, ...) |
| { |
| stopifnot(length(n) == 1L) |
| nrx <- nrow(x) |
| n <- if (n < 0L) max(nrx + n, 0L) else min(n, nrx) |
| sel <- as.integer(seq.int(to = nrx, length.out = n)) |
| ## TODO: Once we allow "LONG_DIM" for matrices, need |
| ## sel <- seq.int(to = nrx, length.out = n) |
| ## if(nrx <= .Machine$integer.max) sel <- as.integer(sel) |
| ans <- x[sel, , drop = FALSE] |
| if (addrownums && is.null(rownames(x))) |
| rownames(ans) <- format(sprintf("[%d,]", sel), justify="right") |
| ans |
| } |
| tail.table <- function(x, n = 6L, addrownums = TRUE, ...) { |
| (if(length(dim(x)) == 2L) tail.matrix else tail.default)(x, n=n, |
| addrownums = addrownums, ...) |
| } |
| |
| tail.ftable <- function(x, n = 6L, addrownums = FALSE, ...) { |
| r <- format(x) |
| dimnames(r) <- list(if(!addrownums) rep.int("", nrow(r)), |
| rep.int("", ncol(r))) |
| noquote(tail.matrix(r, n = n, addrownums = addrownums, ...)) |
| } |
| |
| tail.function <- function(x, n = 6L, ...) |
| { |
| lines <- as.matrix(deparse(x)) |
| dimnames(lines) <- list(seq_along(lines),"") |
| noquote(tail(lines, n=n)) |
| } |