2 votes

Please replace the HTML text you need to be translated.

J'ai une liste de tables et je veux la compiler pour une sortie LaTex. Voici le code :

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)

La liste Table contient trois tables de contingence dans ce cas et je peux compiler la sortie en LaTex en utilisant ce code :

<< label = tabTable, echo = FALSE, results = tex >>=
print(xtable(Table[1]$'1', caption = "Tableau de contingence pour agegp et 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')))
@

Pour envoyer la sortie des trois tables de contingence, je dois écrire trois commandes de ce type. Dans ce cas, c'est faisable. Mais pour mes données réelles, j'ai beaucoup de tables de contingence. J'aimerais savoir comment envoyer toutes les tables de contingence de manière plus efficace. Un choix est simplement d'imprimer la liste Table sans xtable. Mais j'aimerais avoir le tableau de contingence dans un joli format de sortie. Merci pour votre temps et votre aide.

4voto

Brian Diggs Points 22433

J'avais besoin de données fictives pour travailler

Données <- data.frame(a=rbinom(100,1,0.5), b=rbinom(100,1,0.3), c=rbinom(100,1,0.6))

Avec votre code pour générer Tableau, cela vous rapprochera

l_ply(Tableau, function(TBL) {
  print(xtable(TBL, 
      caption = "Tableau de contingence pour agegp et alcgp", #Ces informations ne se trouvent nulle part dans le TBL
      label = "tab:Table[1]", #C'est aussi problématique
      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)))  
})

Vous pouvez obtenir le bon label en itérant sur un index de Tableau plutôt que sur Tableau lui-même

a_ply(seq_along(Tableau), 1, function(i) {
  print(xtable(Tableau[[i]], 
      caption = "Tableau de contingence pour agegp et alcgp", #Ces informations ne se trouvent nulle part dans le Tableau[[i]]
      label = paste("tab:Table[",i,"]",sep=""), 
      digits = c(0, rep(0, ncol(Tableau[[i]]))),
    align = paste(paste("l|", paste(rep("r", ncol(Tableau[[i]])-1), collapse = ''), sep = ""), "l", sep = "")),
    table.placement = "tbp",
    caption.placement = "top",
    hline.after = c(-1, 0, nrow(Tableau[[i]])))       
})

La légende ne peut pas être faite automatiquement car l'information n'est pas là. Cependant, si vous modifiez votre fonction TableFn, vous pouvez ajouter cette information et ensuite l'extraire à nouveau.

TableFn <- function(x) {
  Tableau <- addmargins(table(Données[, x[1]], Données[, x[2]]))
  names(attr(Tableau,"dimnames")) <- names(Données)[x]
  return(Tableau)
}

Tableau <- alply(.data=combinaisons, .margins=2, .fun=TableFn, .expand=TRUE)

a_ply(seq_along(Tableau), 1, function(i) {
  vars <- names(attr(Tableau[[i]],"dimnames"))
  print(xtable(Tableau[[i]], 
      caption = paste("Tableau de contingence pour", vars[1], "et", vars[2]),
      label = paste("tab:Table[",i,"]",sep=""), #C'est aussi problématique
      digits = c(0, rep(0, ncol(Tableau[[i]]))),
    align = paste(paste("l|", paste(rep("r", ncol(Tableau[[i]])-1), collapse = ''), sep = ""), "l", sep = "")),
    table.placement = "tbp",
    caption.placement = "top",
    hline.after = c(-1, 0, nrow(Tableau[[i]])))       
})

1voto

Ramnath Points 24798

Étant donné l'absence de données réelles et de leur structure, voici une approche.

TabelFn2 <- function(x) {
  Table <- addmargins(table(Data[, x[1]], Data[, x[2]]))
  print(xtable(Table$'1', caption = "Tableau de contingence pour agegp et 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')))
 }

<>=
a_ply(.data=combos, .margins=2, .fun=TabelFn2)
@

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X