вывод xtable для списка таблиц
У меня есть список таблиц, и я хочу использовать его для вывода LaTex. Вот код:
Data <- esoph[ , 1:3]
library(plyr)
combos <- combn(ncol(Data),2)
TabelFn <- function(x) {
Table <- addmargins(table(Data[, x[1]], Data[, x[2]]))
return(Table)
}
Table <- alply(.data=combos, .margins=2, .fun=TabelFn, .expand=TRUE)
library(xtable)
В этом случае список Table
содержит три таблицы непредвиденных обстоятельств, и я могу передать результат в LaTex, используя этот код:
<< label = tabTable, echo = FALSE, results = tex >>=
print(xtable(Table[1]$'1', caption = "Contingency table for agegp and alcgp", label = "tab:Table[1]",
digits = c(0, rep(0, ncol(Table[1]$'1'))),
align = paste(paste("l|", paste(rep("r", ncol(Table[1]$'1')-1), collapse = ''), sep = ""), "l", sep = "")),
table.placement = "tbp", caption.placement = "top",
hline.after = c(-1, 0, nrow(Table[1]$'1')))
@
Чтобы отправить выходные данные трех таблиц непредвиденных обстоятельств, я должен написать три такие команды. В данном случае это осуществимо. Но для моих фактических данных у меня есть много таблиц непредвиденных обстоятельств. Я хотел бы знать, как отправить все таблицы непредвиденных обстоятельств более эффективно. Один из вариантов-просто печатать список Table
Без xtable
. Но я хотел бы иметь таблицу непредвиденных обстоятельств в хорошем выходном формате. Спасибо за ваше время и помощь.
2 ответа:
Мне нужны были некоторые фиктивные данные для работы с
Data <- data.frame(a=rbinom(100,1,0.5), b=rbinom(100,1,0.3), c=rbinom(100,1,0.6))
С вашим кодом для генерации
Table
, это позволит вам приблизиться кl_ply(Table, function(TBL) { print(xtable(TBL, caption = "Contingency table for agegp and alcgp", #This information is not in the TBL anywhere label = "tab:Table[1]", # This is also problematic digits = c(0, rep(0, ncol(TBL))), align = paste(paste("l|", paste(rep("r", ncol(TBL)-1), collapse = ''), sep = ""), "l", sep = "")), table.placement = "tbp", caption.placement = "top", hline.after = c(-1, 0, nrow(TBL))) })
Вы можете получить метку правильно, перебрав индекс
Table
, а не самTable
Подпись не может быть сделана автоматически, потому что информация отсутствует. Однако, если вы измените свою функциюa_ply(seq_along(Table), 1, function(i) { print(xtable(Table[[i]], caption = "Contingency table for agegp and alcgp", #This information is not in the Table[[i]] anywhere label = paste("tab:Table[",i,"]",sep=""), digits = c(0, rep(0, ncol(Table[[i]]))), align = paste(paste("l|", paste(rep("r", ncol(Table[[i]])-1), collapse = ''), sep = ""), "l", sep = "")), table.placement = "tbp", caption.placement = "top", hline.after = c(-1, 0, nrow(Table[[i]]))) })
TableFn
, Вы можете добавить эту информацию, а затем извлечь ее обратно.TabelFn <- function(x) { Table <- addmargins(table(Data[, x[1]], Data[, x[2]])) names(attr(Table,"dimnames")) <- names(Data)[x] return(Table) } Table <- alply(.data=combos, .margins=2, .fun=TabelFn, .expand=TRUE) a_ply(seq_along(Table), 1, function(i) { vars <- names(attr(Table[[i]],"dimnames")) print(xtable(Table[[i]], caption = paste("Contingency table for", vars[1], "and", vars[2]), label = paste("tab:Table[",i,"]",sep=""), # This is also problematic digits = c(0, rep(0, ncol(Table[[i]]))), align = paste(paste("l|", paste(rep("r", ncol(Table[[i]])-1), collapse = ''), sep = ""), "l", sep = "")), table.placement = "tbp", caption.placement = "top", hline.after = c(-1, 0, nrow(Table[[i]]))) })
Учитывая отсутствие фактических данных и их структуры, можно предложить один подход.
TabelFn2 <- function(x) { Table <- addmargins(table(Data[, x[1]], Data[, x[2]])) print(xtable(Table$'1', caption = "Contingency table for agegp and alcgp", label = "tab:Table", digits = c(0, rep(0, ncol(Table$'1'))), align = paste(paste("l|", paste(rep("r", ncol(Table$'1')-1), collapse = ''), sep = ""), "l", sep = "")), table.placement = "tbp", caption.placement = "top", hline.after = c(-1, 0, nrow(Table$'1'))) } <<echo = F, results = tex>>= a_ply(.data=combos, .margins=2, .fun=TabelFn2) @