Rev 72369 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
# File src/library/stats/R/diffinv.R# Part of the R package, https://www.R-project.org## 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/## Cppyright (C) 2003-2017 R Core Team## Copyright 1997-1999 Adrian Trapletti## This version distributed under GPL (version 2 or later)diffinv <- function (x, ...) { UseMethod("diffinv") }## the workhorse of diffinv.default:diffinv.vector <- function (x, lag = 1L, differences = 1L, xi, ...){if (!is.vector(x)) stop ("'x' is not a vector")lag <- as.integer(lag); differences <- as.integer(differences)if (lag < 1L || differences < 1L) stop ("bad value for 'lag' or 'differences'")if(missing(xi)) xi <- rep(0., lag*differences)if (length(xi) != lag*differences)stop("'xi' does not have the right length")if (differences == 1L) {x <- as.double(x)xi <- as.double(xi)n <- as.integer(length(x))if(is.na(n)) stop(gettextf("invalid value of %s", "length(x)"), domain = NA)# y <- c(xi[1L:lag], double(n))# z <- .C(C_R_intgrt_vec, x, y = y, as.integer(lag), n)$y.Call(C_intgrt_vec, x, xi, lag)}elsediffinv.vector(diffinv.vector(x, lag, differences-1L,diff(xi, lag=lag, differences=1L)),lag, 1L, xi[1L:lag])}diffinv.default <- function (x, lag = 1, differences = 1, xi, ...){if (is.matrix(x)) {n <- nrow(x)m <- ncol(x)y <- matrix(0, nrow = n+lag*differences, ncol = m)if(m >= 1) {if(missing(xi)) xi <- matrix(0.0, lag*differences, m)if(NROW(xi) != lag*differences || NCOL(xi) != m)stop("incorrect dimensions for 'xi'")for (i in 1L:m)y[,i] <- diffinv.vector(as.vector(x[,i]), lag, differences,as.vector(xi[,i]))}}else if (is.vector(x))y <- diffinv.vector(x, lag, differences, xi)elsestop ("'x' is not a vector or matrix")y}diffinv.ts <- function (x, lag = 1, differences = 1, xi, ...){y <- diffinv.default(if(is.ts(x) && is.null(dim(x))) as.vector(x) elseas.matrix(x), lag, differences, xi)ts(y, frequency = frequency(x), end = end(x))}toeplitz <- function (x){if(!is.vector(x)) stop("'x' is not a vector")n <- length(x)A <- matrix(raw(), n, n)matrix(x[abs(col(A) - row(A)) + 1L], n, n)}