Dear List, A posting to R-Help exposed this problem with the print method for objects of class Arima:> set.seed(1) > x <- arima.sim(n = 100, list(ar = 0.8897, ma = -0.2279)) > mod <- arima(x, order = c(1,0,1)) > coefs <- coef(mod) > mod2 <- arima(x, order = c(1,0,1), fixed = coefs) > mod2Call: arima(x = x, order = c(1, 0, 1), fixed = coefs) Coefficients: Error in se && nrow(x$var.coef) : invalid 'y' type in 'x && y'> print(mod2, se = FALSE)Call: arima(x = x, order = c(1, 0, 1), fixed = coefs) Coefficients: ar1 ma1 intercept 0.9323 -0.2940 -0.0353 sigma^2 estimated as 0.8339: log likelihood = -133.55, aic = 269.11 The print methods raises an error in this case, where all coefficients are fixed, because x$var.coef is of length(0), which in turn results in NULL being used in the && comparison, resulting in the error. A potential fix is to just include a check for length(x$var.coef) > 0 in the if statement. This fix, when applied to: R version 2.10.0 Under development (unstable) (2009-06-05 r48712) fixes this particular problem and passes make check-devel. A patch against r48712 is attached, and included here in-line: [gavin at desktop build]$ svn diff ../src/library/stats/R/arima.R Index: ../src/library/stats/R/arima.R ==================================================================--- ../src/library/stats/R/arima.R (revision 48712) +++ ../src/library/stats/R/arima.R (working copy) @@ -355,7 +355,7 @@ if (length(x$coef)) { cat("Coefficients:\n") coef <- round(x$coef, digits = digits) - if (se && nrow(x$var.coef)) { + if (se && length(x$var.coef) > 0 && nrow(x$var.coef)) { ses <- rep(0, length(coef)) ses[x$mask] <- round(sqrt(diag(x$var.coef)), digits = digits) coef <- matrix(coef, 1L, dimnames = list(NULL, names(coef))) HTH G -- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% Dr. Gavin Simpson [t] +44 (0)20 7679 0522 ECRC, UCL Geography, [f] +44 (0)20 7679 0565 Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/ UK. WC1E 6BT. [w] http://www.freshwaters.org.uk %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% -------------- next part -------------- A non-text attachment was scrubbed... Name: print.Arima.patch Type: text/x-patch Size: 642 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20090605/5f85727f/attachment.bin> -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 197 bytes Desc: This is a digitally signed message part URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20090605/5f85727f/attachment-0001.bin>
Why not use NROW? On Fri, 5 Jun 2009, Gavin Simpson wrote:> Dear List, > > A posting to R-Help exposed this problem with the print method for > objects of class Arima: > >> set.seed(1) >> x <- arima.sim(n = 100, list(ar = 0.8897, ma = -0.2279)) >> mod <- arima(x, order = c(1,0,1)) >> coefs <- coef(mod) >> mod2 <- arima(x, order = c(1,0,1), fixed = coefs) >> mod2 > > Call: > arima(x = x, order = c(1, 0, 1), fixed = coefs) > > Coefficients: > Error in se && nrow(x$var.coef) : invalid 'y' type in 'x && y' >> print(mod2, se = FALSE) > > Call: > arima(x = x, order = c(1, 0, 1), fixed = coefs) > > Coefficients: > ar1 ma1 intercept > 0.9323 -0.2940 -0.0353 > > sigma^2 estimated as 0.8339: log likelihood = -133.55, aic = 269.11 > > The print methods raises an error in this case, where all coefficients > are fixed, because x$var.coef is of length(0), which in turn results in > NULL being used in the && comparison, resulting in the error. > > A potential fix is to just include a check for length(x$var.coef) > 0 in > the if statement. This fix, when applied to: > > R version 2.10.0 Under development (unstable) (2009-06-05 r48712) > > fixes this particular problem and passes make check-devel. A patch > against r48712 is attached, and included here in-line: > > [gavin at desktop build]$ svn diff ../src/library/stats/R/arima.R > Index: ../src/library/stats/R/arima.R > ==================================================================> --- ../src/library/stats/R/arima.R (revision 48712) > +++ ../src/library/stats/R/arima.R (working copy) > @@ -355,7 +355,7 @@ > if (length(x$coef)) { > cat("Coefficients:\n") > coef <- round(x$coef, digits = digits) > - if (se && nrow(x$var.coef)) { > + if (se && length(x$var.coef) > 0 && nrow(x$var.coef)) { > ses <- rep(0, length(coef)) > ses[x$mask] <- round(sqrt(diag(x$var.coef)), digits = digits) > coef <- matrix(coef, 1L, dimnames = list(NULL, names(coef))) > > HTH > > G > -- > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% > Dr. Gavin Simpson [t] +44 (0)20 7679 0522 > ECRC, UCL Geography, [f] +44 (0)20 7679 0565 > Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk > Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/ > UK. WC1E 6BT. [w] http://www.freshwaters.org.uk > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% > >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595