【问题标题】:Creating a latex table from ftable object in R从 R 中的 ftable 对象创建乳胶表
【发布时间】:2012-03-28 08:08:25
【问题描述】:

在我提问之前让我创建一些数据。

 my.data <- data.frame(A = sample(seq(1,100,by=5),10,replace=TRUE),W = rnorm(10),X =sample(1:10),Y = sample(c("yes", "no"), 10, replace = TRUE),Z=sample(c('a','b','c','d'),10,replace=TRUE))

attach(my.data)

my.d <- xtabs(W~Z+Y+A);my.d
table.data <- ftable(my.d)

result1 <- round(table.data,2)

结果 1 看起来像 ..

      A     6    11    16    26    71    76    86    91
Z Y                                                    
a no     0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 yes    0.00  0.56  0.00  0.00  0.00  0.79  0.00  0.01

b no     0.61  0.00 -0.22  0.14  0.00  0.00 -0.08  1.71
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

c no     0.00  0.00  0.00  0.00 -0.08  0.00  0.00  0.00
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

d no     0.00  0.00  0.00  0.00  1.00  0.00  0.00  0.00
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

我实际上正在使用 knitr 包写一篇文章。 有没有办法将 result1 转换为乳胶表 当我的 *.rnw 文件被编译时自动?

我尝试使用 xtable 但出现以下错误...

Error in UseMethod("xtable") :   no applicable method for 'xtable' applied to an object of class "ftable"

谢谢@DWin 和@Yihui。除了latex(),我还使用了如下所述的xtable

print(xtable(ftable2data.frame(result1)))

为了删除不必要的行名,我做了以下操作

print(xtable(ftable2data.frame(result1)),include.rownames=FALSE)

【问题讨论】:

    标签: r latex xtable knitr


    【解决方案1】:

    作为替代方案,memisc 为 ftable 对象提供了 toLatex 方法。

    library(memisc)
    toLatex(result1)
    

    【讨论】:

      【解决方案2】:

      方法一:

      require(MIfuns)
      require(Hmisc)
      latex(ftable2data.frame(result1))
      

      【讨论】:

      • latex(ftable2data.frame(result1)) 似乎没有响应@DWin
      • 你支持 LaTeX 设置的可能和我的不一样。
      • 我猜你需要防止latex()自动编译tex文件(默认):使用latex(ftable2data.frame(result1), file='');还要记得设置块选项results=asisresults=tex
      • 此软件包不再可用。 install.packages("MIfuns") Warning in install.packages : package ‘MIfuns’ is not available (for R version 3.1.2)(已被 memisc 取代,请参阅大卫的回答。
      【解决方案3】:

      你可以使用包xtable:

      library(xtable)
      mytable=ftable(mydata)
      print(
        xtable(format(mytable)),file="~/Desktop/mytable.tex"
      )
      

      我不知道它与给定的其他选项相比如何。

      【讨论】:

      • 简单,没有额外的包,虽然它需要一点点适应。
      【解决方案4】:

      基于 user2030503 的回答,

      # install.packages('simsalapar')
      library(simsalapar)
      utils::toLatex(result1)
      

      函数 toLatex 是一个 S3 泛型,所以当给定一个 ftable 对象时传递给simsalapar:::toLatex.ftable()。或者,您也可以使用simsalapar:::toLatex.ftable(result1)

      完成后,我需要在乳胶序言中包含\usepackage{booktabs},因为toLatex.ftable 使用\toprule。或者,您可以传递booktabs=FALSE

      看起来toLatex.ftable 也去掉了尾随的零。为了解决这个问题,这就是我所做的(请参阅Formatting Decimal places in R 的答案以获取format()):

      result1[1:nrow(result1),1:ncol(result1)] %<>% as.numeric %>% format(nsmall=2,digits=3)
      

      这会将 ftable 的矩阵转换为字符矩阵,但 toLatex.ftable 仍然有效。

      我还发现 \usepackage{pdflscape} 并用 \begin{landscape}\end{landscape} 包裹我的表很有帮助,因为这些列联表可能非常宽。

      【讨论】:

      • 如何将文件保存到.tex 文件中?
      • 我的最后一条评论很糟糕;在这里,如果有一个简单的方法来做到这一点。首先,假设我们有table_to_LaTeX&lt;-utils::toLatex(result1),然后我们将这些行写在磁盘上:writeLines(table_to_LaTeX, "file_name.tex")
      【解决方案5】:

      使用simsalapar包提供的toLatex()函数。

      library(simsalapar)
      toLatex(result1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多