Является ли stargazer интерпретацией данных data.frame как латексного кода ошибкой или это задумано?

У меня возникла проблема, когда функция Stargazer интерпретирует данные в моем data.frame как латексную команду. Я хотел бы найти способ подавить эту особенность звездочета. См. ниже.

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   
     ------------------------------

Здесь амперсанд заставляет предположить новый столбец из-за его значения в латексе. Я подтвердил это, потому что замена & на и приводит к правильной печати таблицы.

  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
 -------------------------------

Есть ли какой-нибудь вариант, который я могу вызвать в функции звездочета, чтобы предотвратить такое поведение?


person k13    schedule 15.04.2015    source источник
comment
какую версию latex и stargazer вы используете?   -  person Tarek    schedule 18.04.2015


Ответы (1)


Похоже, что в текущей версии 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 форматирует вывод таблицы, и не фиксируется никаким параметром команды.

Если вы просто хотите отформатировать фрейм данных, аналогичный тому, который вы разместили в своем примере, я бы использовал print.xtable() из пакета xtable, который имеет функцию очистки, которая правильно обрабатывает амперсанды в строках и создает как правильный LaTeX, так и HTML-выход для предлагаемого примера. фрейм данных.

person Felix    schedule 18.04.2015
comment
вы также можете попробовать Hmisc::latex(). - person Ben Bolker; 18.04.2015
comment
(+1) Спасибо за ответ ... Мне любопытно, хотя .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). Извините, я, наверное, упускаю очевидное. - person user20650; 18.04.2015
comment
ах .. есть еще другие функции, заменяющие символы, .replace.latex.symbols и так далее ... - person user20650; 18.04.2015