观星者是否将data.frame数据解释为LaTeX代码构成了一个错误,还是这个行为是有意的?

7
我遇到了一个问题,Stargazer函数将我的数据框中的数据解释为LaTeX命令。我想找到一种方法来禁止stargazer的这个特性。请参见下面的内容。
z <- c("Bank of America Corp",
    "Citigroup Inc",
    "JPMorgan Chase & Co",
      "Morgan Stanley",
     "Wells Fargo & Co")

 s <- data.frame(z=z, l= c(100000, 25, 10000, 24, 100000))
 library(stargazer)
 stargazer(s, type = "text", summary = FALSE)
 # prints out
     ==============================
               z              l   
     ------------------------------
      1 Bank of America Corp 100,000
      2    Citigroup Inc       25   
      3    JPMorgan Chase      Co   
      4    Morgan Stanley      24   
      5     Wells Fargo        Co   
     ------------------------------

在这里,&符号在latex中具有特殊含义,导致表格出现新的列。我确认了这一点,因为将&替换为and后,表格可以正确地打印出来。

  z <- c("Bank of America Corp",
    "Citigroup Inc",
    "JPMorgan Chase and Co",
      "Morgan Stanley",
     "Wells Fargo and Co")

 s <- data.frame(z=z, l= c(100000, 25, 10000, 24, 100000))
 library(stargazer)
 stargazer(s, type = "text", summary = FALSE)
 # prints out

 ===============================
             z              l   
 -------------------------------
 1 Bank of America Corp  100,000
 2     Citigroup Inc       25   
 3 JPMorgan Chase and Co 10,000 
 4    Morgan Stanley       24   
 5  Wells Fargo and Co   100,000
 -------------------------------

有没有任何选项可以在stargazer函数中调用以防止这种行为?

1
你使用的是哪个版本的Latex和Stargazer? - Tarek
1个回答

4

在当前版本的stargazer中似乎没有这个选项。如果您检查源代码,您会发现以下代码块(第4704行):

############## TEXT AND html MODE ##############


  .split.line <-    # split line of a LaTeX table into constituent parts separated by &
  function(s) {
    # remove the "\\\\"
    s <- gsub("\\\\", "", s, fixed=TRUE)
    s <- paste("  ",s,"  ", sep="")

    return(.trim(strsplit(s, " &", fixed=TRUE)[[1]]))
  }

因此,显然,这似乎是硬编码到stargazer格式化表输出的方式中的,并且没有被任何命令选项捕获。

如果您只想格式化类似于您在示例中发布的数据框,则应使用xtable包中的print.xtable(),该包具有正确处理字符串中的和号并为建议的示例数据框生成正确的LaTeX和HTML输出的清理功能。


1
你也可以尝试使用 Hmisc::latex() - Ben Bolker
谢谢您的回答...不过我很好奇.split.line似乎忽略了\\&,但是stargazer却没有。例如,z <- c("JPMorgan Chase \\& Co", "Wells Fargo & Co"); lapply(z, .split.line) ; s <- data.frame(z=z, l= c(100000, 25)) ; stargazer(s, type = "text", summary=F)。抱歉,我可能错过了显而易见的东西。 - user20650
啊... 还有其他替换字符的函数,如 .replace.latex.symbols 等等... - user20650

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接