1### Port to R and a few small improvements: 2### Copyright � 2000 Martin Maechler, ETH Zurich 3 4mat2tex <- function(x, file = "mat.tex", envir = "tabular", 5 nam.center = "l", col.center = "c", 6 append = TRUE, digits = 3, title) 7{ 8 if(length(d.x <- dim(x)) != 2) 9 stop("'x' must be a matrix like object with dim(x) of length 2") 10 if(any(d.x <= 0)) 11 stop("'dim(x)' must be positive") 12 nr.x <- d.x[1] 13 nc.x <- d.x[2] 14 c2ind <- (1:nc.x)[-1] # possibly empty 15 16 ## determine if there are labels to be processed 17 dn.x <- dimnames(x) 18 if(has.rowlabs <- !is.null(dn.x[[1]])) rowlabs <- dn.x[[1]] 19 if(has.collabs <- !is.null(dn.x[[2]])) collabs <- dn.x[[2]] 20 21 ## produce column specification 22 stopifnot(any(nam.center == c("l","r","c"))) 23 stopifnot(all(col.center %in% c("l","r","c"))) 24 col.center <- rep(col.center, length = nc.x) 25 colspec <- "{|" 26 if(has.rowlabs) 27 colspec <- paste(colspec, nam.center, "||") 28 colspec <- paste0(colspec, paste(col.center, "|", collapse=""), "}") 29 cat(paste(sprintf("\\begin{%s}", envir), colspec, " \n"), file=file, append=append) 30 31 span <- nc.x + if(has.rowlabs) 1 else 0 32 cat(if(!missing(title)) paste("\\multicolumn{", span, 33 "}{c}{", title, "} \\\\"), 34 "\\hline \n", file = file, append = TRUE) 35 ## output column labels if needed 36 if(has.collabs) { 37 collabline <- " " 38 if(has.rowlabs) 39 collabline <- paste(collabline, " \\ &") 40 collabline <- paste(collabline, collabs[1]) 41 for(i in c2ind) 42 collabline <- paste(collabline, "&", collabs[i]) 43 collabline <- paste(collabline, "\\\\ \\hline \\hline") 44 cat(collabline, "\n", file = file, append = TRUE) 45 } 46 ## output matrix entries 47 op <- options(digits = digits); on.exit(op) 48 for(i in 1:nr.x) { 49 thisline <- 50 if(has.rowlabs) 51 paste(rowlabs[i], "&", format(x[i, 1])) else format(x[i, 1]) 52 for(j in c2ind) 53 thisline <- paste(thisline, "&", format(x[i, j])) 54 55 thisline <- paste(thisline, "\\\\ \\hline") 56 cat(paste(thisline, "\n"), file = file, append = TRUE) 57 } 58 cat(paste0("\\end{", envir, "}\n"), file = file, append = TRUE) 59} 60 61