Dear expeRts,

Please find attached the .diff for a bug fix in R-devel 62124. format.ftable()
fails to format ftable()s correctly which have no row.vars or no
col.vars. That should work with the patch (the example code below also runs
correctly for all the (new) 'method's).

Cheers,

Marius


--8<---------------cut here---------------start------------->8---
(ft1 <- ftable(Titanic, col.vars = 1:4))
(ft2 <- ftable(Titanic, row.vars = 1))
(ft3 <- ftable(Titanic, row.vars = 1:2))
(ft4 <- ftable(Titanic, row.vars = 1:3))
(ft5 <- ftable(Titanic, row.vars = 1:4))

## former version (R-devel 62124)
stats:::format.ftable(ft1) # fails
stats:::format.ftable(ft2)
stats:::format.ftable(ft3)
stats:::format.ftable(ft4)
stats:::format.ftable(ft5) # fails

## all work fine now (format.ftable.() is the patched version):
format.ftable.(ft1)
format.ftable.(ft1, method="row.compact")
format.ftable.(ft1, method="col.compact")
format.ftable.(ft1, method="compact")
format.ftable.(ft2)
format.ftable.(ft2, method="row.compact")
format.ftable.(ft2, method="col.compact")
format.ftable.(ft2, method="compact")
format.ftable.(ft3)
format.ftable.(ft3, method="row.compact")
format.ftable.(ft3, method="col.compact")
format.ftable.(ft3, method="compact")
format.ftable.(ft4)
format.ftable.(ft4, method="row.compact")
format.ftable.(ft4, method="col.compact")
format.ftable.(ft4, method="compact")
format.ftable.(ft5)
format.ftable.(ft5, method="row.compact")
format.ftable.(ft5, method="col.compact")
format.ftable.(ft5, method="compact")
--8<---------------cut here---------------end--------------->8---


-- 
ETH Zurich
Dr. Marius Hofert
RiskLab, Department of Mathematics
HG E 65.2
Rämistrasse 101
8092 Zurich
Switzerland

Phone +41 44 632 2423
http://www.math.ethz.ch/~hofertj
GPG key fingerprint 8EF4 5842 0EA2 5E1D 3D7F  0E34 AD4C 566E 655F 3F7C
--- ftable_R-devel-62124.R	2013-02-27 17:51:38.000000000 +0100
+++ ftable_new.R	2013-03-05 19:50:15.775512036 +0100
@@ -171,7 +171,7 @@
 format.ftable <-
     function(x, quote=TRUE, digits=getOption("digits"),
              method=c("non.compact", "row.compact", "col.compact", "compact"),
-             lsep=" \\ ", ...)
+             lsep=" | ", ...)
 {
     if(!inherits(x, "ftable"))
 	stop("'x' must be an \"ftable\" object")
@@ -194,9 +194,18 @@
 	if(is.null(nmx)) rep_len("", length(x)) else nmx
     }
 
-    xrv <- attr(x, "row.vars")
-    xcv <- attr(x, "col.vars")
+    l.xrv <- length(xrv <- attr(x, "row.vars"))
+    l.xcv <- length(xcv <- attr(x, "col.vars"))
     method <- match.arg(method)
+    ## possibly adjust method to correctly deal with 'extreme' layouts (no col.vars, no row.vars)
+    if(l.xrv==0) {
+        if(method=="col.compact") method <- "non.compact" # 'non.compact' already produces a 'col.compact' version
+        else if (method=="compact") method <- "row.compact" # only need to 'row.compact'ify
+    }
+    if(l.xcv==0) {
+        if(method=="row.compact") method <- "non.compact" # 'non.compact' already produces a 'row.compact' version
+        else if (method=="compact") method <- "col.compact" # only need to 'col.compact'ify
+    }
     LABS <-
 	switch(method,
 	       "non.compact" =		# current default
@@ -224,8 +233,6 @@
 	   },
 	       "compact" =		# fully compact version
 	   {
-	       l.xcv <- length(xcv)
-	       l.xrv <- length(xrv)
 	       xrv.nms <- makeNames(xrv)
 	       xcv.nms <- makeNames(xcv)
 	       mat <- cbind(rbind(cbind(matrix("", nrow = l.xcv-1, ncol = l.xrv-1),
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to