3

学术论文中的回归结果表通常有一行描述估计模型的某些特征。例如,您可能有一个行名称:“模型包括单独的固定效应”,然后每个关联的单元格将有一个相应的是/否。

我的问题是,在使用 R 制作 LaTeX 表格的众多工具中是否有可能(参见Tools for making latex tables in R)将表格生成函数传递到这样一行为了使这一点更具体,我在想象具有如下参数:

model.info.row <- list(name = "Fixed effects", values = c("Y", "N", "Y"))

我已经阅读了 memisc mtable 和 toLaTeX 文档,并没有看到任何似乎能够做到这一点的东西——不确定其他包/方法,但这似乎是一个常见的用例,我怀疑有一些方法可以做到这个。

4

2 回答 2

5

You might try to add that new line(s) directly to the table you want to pass to e.g. xtable. Really lame example:

  1. Let us have some model:

    m <- lm(mtcars$hp ~ mtcars$wt)
    
  2. Grab the table which is returned in xtable and other helpers:

    df <- as.data.frame(summary(m)$coefficient)
    
  3. Add a new line with some values:

    df[3, ] <- c(sample(c('foo', 'bar'), 4, replace = TRUE))
    
  4. Update the rowname of your custom line:

    rownames(df)[3] <- 'FOOBAR'
    
  5. Check out results:

    > df
                         Estimate       Std. Error             t value            Pr(>|t|)
    (Intercept) -1.82092177119464 32.3246158121787 -0.0563323561763288     0.95545056134944
    mtcars$wt    46.1600502824445 9.62530003926982    4.79569988406785 4.14582744107531e-05
    FOOBAR                    bar              foo                 bar                  bar
    
  6. Or just call xtable:

    > xtable(df)
    % latex table generated in R 2.15.0 by xtable 1.7-0 package
    % Tue Jun 12 01:39:46 2012
    \begin{table}[ht]
    \begin{center}
    \begin{tabular}{rllll}
      \hline
     & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ 
      \hline
    (Intercept) & -1.82092177119464 & 32.3246158121787 & -0.0563323561763288 & 0.95545056134944 \\ 
      mtcars\$wt & 46.1600502824445 & 9.62530003926982 & 4.79569988406785 & 4.14582744107531e-05 \\ 
      FOOBAR & bar & foo & bar & bar \\ 
       \hline
    \end{tabular}
    \end{center}
    \end{table}
    
于 2012-06-11T23:40:37.573 回答
0

我最终编写了一些 hacky R 代码(请注意,它仅适用于具有 sed、wc 和 awk 可用的系统),它更灵活,并且在 memisc 'mtable' 函数中运行良好,这是我生成 LaTeX 表的首选方式。基本上,您将表写入文本文件,然后使用 (1) 文件中要插入的行号 (2) 要插入的行和 (3) 文件名调用此函数您想要插入(请注意,此功能将覆盖您现有的文件)。代码是:

insert.note <-function(linenumber, line, file){
  num.lines <- as.numeric(system(paste("wc", file, "| awk '{print $1}'"), intern=TRUE))
  tmp <- tempfile()
  system(paste("head -n ", linenumber, file, "> ", tmp))
  sink(tmp, append=TRUE)
   cat(line)
   sink()
  system(paste("tail -n", num.lines - linenumber, file, ">>", tmp))
  system(paste("mv", tmp, file))
}

作为辅助函数,此代码使用 mtable 的双列间距创建了一个有效的 LaTeX 行:

 create.note <- function(l, include.row.end = TRUE){
  n <- length(l)
  s <- ""
  i <- 1
  for(note in l){
    if(i < n){
      cap <- "&&"
    } else {
      if(include.row.end){
        cap <- "\\\\ \n "
      } else {
          cap <- " \n"
      }
    }
    s <- paste(s, note, cap)
    i <- i + 1
  }
  s
}

include.row.end 参数是为了以防您想传递类似 "\midrule" 的东西并且不想得到额外的行。

于 2012-08-05T22:01:02.277 回答