Hmisc使用rowname = NULL分隔列标题
我正在尝试在由组分隔的标题下方添加列标题和水平线。 当我做下面的工作时,
library(Hmisc)
data(mtcars)
latex(mtcars, file ='', cgroup = c("Group 1", "Group 2"), n.cgroup = c(5, 6))
但是当我尝试删除rownames时,组1和2下的行合并到同一行中
library(Hmisc)
data(mtcars)
latex(mtcars, file ='', cgroup = c("Group 1", "Group 2"), n.cgroup = c(5, 6), rowname = NULL)
有谁知道一种方法来解决这个问题?
当latex.default
rownames=NULL
时,latex函数latex.default
不使用列组参数。 在函数中我们有:
if (length(rowname)) {
cx <- cbind(rowname, cx)
col.just <- c(rowlabel.just, col.just)
if (length(extracolheads))
extracolheads <- c("", extracolheads)
collabel.just <- c(rowlabel.just, collabel.just)
if (length(cgroup) == 0L)
colheads <- c(rowlabel, colheads)
else {
colheads <- c("", colheads)
cgroup <- c(rowlabel, cgroup)
rlj <- ifelse(rowlabel.just == "l", "l", "c")
cgroup.just <- c(rlj, cgroup.just)
n.cgroup <- c(1, n.cgroup)
cgroup.cols <- 1 + cgroup.cols
cline <- paste(sl, "cline{", cgroup.cols[, 1], "-", cgroup.cols[,
2], "}", sep = "", collapse = " ")
}
nc <- 1 + nc
}
将cgroup.cols作为从n.cgroup
参数计算出来的第一列和最后一列
first.col last.col
[1,] 1 5
[2,] 7 12
我认为这是一个错误。 所以目前唯一的方法是手动编辑你的tex输出,使用这个函数,在这个函数中你重复你传递给你的latex的参数,以得到tex file
和n.cgroup
:
change_cline <- function(file,n.cgroup){
file_to_edit <-readLines(file)
pos <- grep("cline",file_to_edit) # get the position of cline in the tex file
cgroup.cols <- matrix(c(1,n.cgroup[2]+1,n.cgroup[1],sum(n.cgroup)+1), nrow=2)
file_to_edit[pos]<- paste("cline{", cgroup.cols[, 1], "-", cgroup.cols[,
2], "}", sep = "", collapse = " ")
cat(file_to_edit, file = file,sep="n")
return(invisible(NULL))
}
最终脚本:
data(mtcars)
la<-latex(mtcars, file ='mtcars2.tex', cgroup = c("Group 1", "Group 2"), n.cgroup = c(5, 6), rowname = NULL)
change_cline(file='mtcars2.tex',n.cgroup = c(5 ,6))
这会产生正确的格式
一种使用我自己的huxtable包的方法:
library(huxtable)
mt_hux <- as_huxtable(mtcars, add_rownames = TRUE, add_colnames = TRUE)
mt_hux <- insert_column(mt_hux, rep("", nrow(mt_hux)), after = 6)
mt_hux <- insert_row(mt_hux, c("", "Group 1", "", "", "", "", "", "Group 2", "", "", "", "", ""))
mt_hux[2, 1] <- "" # get rid of ugly 'row names'
colspan(mt_hux)[1, c(2, 8)] <- c(5, 6)
align(mt_hux)[1, c(2, 8)] <- "center"
top_border(mt_hux)[1,] <- 1
bottom_border(mt_hux)[1, c(2, 8)] <- 1
bottom_border(mt_hux)[2,] <- 1
# this should be what you want:
mt_hux
这有一个限制:你不能得到漂亮的双线。 但是你可以改变线宽,如果这是一个合适的替代品。 你也可以尝试pixiedust
包。