blob: 8f2391cfb15a91312742810d08e410a1edda23b7 [file] [log] [blame]
# File src/library/base/R/print.R
# Part of the R package, https://www.R-project.org
#
# Copyright (C) 1995-2018 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/
print <- function(x, ...) UseMethod("print")
##- Need '...' such that it can be called as NextMethod("print", ...):
print.default <- function(x, digits = NULL, quote = TRUE, na.print = NULL,
print.gap = NULL, right = FALSE, max = NULL,
useSource = TRUE, ...)
{
# Arguments are wrapped in another pairlist because we need to
# forward them to recursive print() calls.
args <- pairlist(
digits = digits,
quote = quote,
na.print = na.print,
print.gap = print.gap,
right = right,
max = max,
useSource = useSource,
...
)
# Missing elements are not forwarded so we pass their
# `missingness`. Also this helps decide whether to call show()
# with S4 objects (if any argument print() is used instead).
missings <- c(missing(digits), missing(quote), missing(na.print),
missing(print.gap), missing(right), missing(max),
missing(useSource))
.Internal(print.default(x, args, missings))
}
prmatrix <-
function (x, rowlab = dn[[1]], collab = dn[[2]],
quote = TRUE, right = FALSE,
na.print = NULL, ...)
{
x <- as.matrix(x)
dn <- dimnames(x)
.Internal(prmatrix(x, rowlab, collab, quote, right, na.print))
}
noquote <- function(obj, right = FALSE) {
## constructor for a useful "minor" class
if(!inherits(obj,"noquote"))
class(obj) <- c(attr(obj, "class"),
if(right) c(right = "noquote") else "noquote")
obj
}
as.matrix.noquote <- function(x, ...) noquote(NextMethod("as.matrix", x))
as.data.frame.noquote <- as.data.frame.vector
c.noquote <- function(..., recursive = FALSE)
structure(NextMethod("c"), class = "noquote")
`[.noquote` <- function (x, ...) {
attr <- attributes(x)
r <- unclass(x)[...] ## shouldn't this be NextMethod?
attributes(r) <- c(attributes(r),
attr[is.na(match(names(attr),
c("dim","dimnames","names")))])
r
}
print.noquote <- function(x, quote = FALSE, right = FALSE, ...) {
if(copy <- !is.null(cl <- attr(x, "class"))) {
isNQ <- cl == "noquote"
if(missing(right))
right <- any("right" == names(cl[isNQ]))
if(copy <- any(isNQ)) {
ox <- x
cl <- cl[!isNQ]
attr(x, "class") <- if(length(cl)) cl # else NULL
}
}
print(x, quote = quote, right = right, ...)
invisible(if(copy) ox else x)
}
## for alias.lm, aov
print.listof <- function(x, ...)
{
nn <- names(x)
ll <- length(x)
if(length(nn) != ll) nn <- paste("Component", seq.int(ll))
for(i in seq_len(ll)) {
cat(nn[i], ":\n"); print(x[[i]], ...); cat("\n")
}
invisible(x)
}
## formerly same as [.AsIs
`[.listof` <- function(x, i, ...) structure(NextMethod("["), class = class(x))
`[.Dlist` <- `[.simple.list` <- `[.listof`
## used for version:
print.simple.list <- function(x, ...)
print(noquote(cbind("_"=unlist(x))), ...)
print.function <- function(x, useSource = TRUE, ...)
print.default(x, useSource=useSource, ...)
## used for getenv()
print.Dlist <- function(x, ...)
{
if(!is.list(x) && !is.matrix(x) && is.null(names(x))) ## messed up Dlist
return(NextMethod())
cat(formatDL(x, ...), sep="\n")
invisible(x)
}