Question

J'ai dataframe que je suis en train dans un Sweave documents en utilisant XTABLE, mais un de mes noms de colonnes est assez longue, et je voudrais le casser sur deux lignes pour économiser de l'espace

calqc_table<-structure(list(RUNID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ANALYTEINDEX = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ID = structure(1:11, .Label = c("Cal A", "Cal B", "Cal C", 
"Cal D", "Cal E", "Cal F", "Cal G", "Cal H", "Cal High", "Cal Low", 
"Cal Mid"), class = "factor"), mean_conc = c(200.619459644855, 
158.264703128903, 102.469121407733, 50.3551544728544, 9.88296440865076, 
4.41727762501703, 2.53494715706024, 1.00602831741361, 199.065054555735, 
2.48063347296935, 50.1499780776199), sd_conc = c(2.3275711264554, 
NA, NA, NA, NA, NA, NA, 0.101636943231162, 0, 0, 0), nrow = c(3, 
1, 1, 1, 1, 1, 1, 3, 2, 2, 2)), .Names = c("Identifier of the Run within the Study", "ANALYTEINDEX", 
"ID", "mean_conc", "sd_conc", "nrow"), row.names = c(NA, -11L
), class = "data.frame")
calqc_xtable<-xtable(calqc_table)

Je l'ai essayé de mettre une nouvelle ligne dans le nom, mais cela ne semble pas fonctionner

names(calqc_table)[1]<-"Identifier of the \nRun within the Study"

Est-il possible de le faire? Je l'ai vu quelqu'un suggère d'utiliser la fonction de latex à partir du package hmisc manuellement itérer sur la table et écrire en latex manuellement, y compris la nouvelle ligne, mais cela semble un peu faf!

Était-ce utile?

La solution

La meilleure façon que je l'ai trouvé pour ce faire est d'indiquer la colonne de la table comme une colonne « largeur fixe » afin que le texte à l'intérieur enveloppe. Avec le forfait xtable, cela peut se faire avec:

align( calqc_xtable ) <- c( 'l', 'p{1.5in}', rep('c',5) )

demandes de xtable que vous fournissez un alignement pour l'option « rownames » c'est la-colonnes spécification l initiale. La spécification de la section, p{1.5in}, est utilisé pour votre première tête de colonne, ce qui est assez longue. Cela limite à une zone de 1,5 pouces de largeur et de l'en-tête se terminera sur plusieurs lignes si nécessaire. Les cinq colonnes sont centrées ensemble à l'aide du spécificateur c.

Un problème majeur avec la largeur des colonnes fixes comme p{1.5in} est que ils ont mis le texte en utilisant un alignement justifié . Cela provoque à élargir l'espacement inter-mot dans chaque ligne de telle sorte que la ligne se remplit la totalité de 1,5 pouces alloués.

Franchement, dans la plupart des cas, cela produit des résultats que je ne peux pas décrire en utilisant le langage poli (je suis un écrou de la typographie amateur et ce genre de comportement provoque les tiques du visage).

La solution est de fournir une commande d'alignement de latex en préfixant un champ de >{} à la spécification de la colonne:

align( calqc_xtable ) <- c( 'l', '>{\\centering}p{1.5in}', rep('c',4) )

D'autres commandes d'alignement utiles sont:

  • \ raggedright -> texte se aligné à gauche
  • \ raggedleft -> texte se aligné à droite

Souvenez-vous de doubler antislashs pour leur échapper dans les chaînes de R. Vous devrez peut-être désactiver la fonction d'assainissement de chaîne qui utilise des xtable par défaut.

Remarque

Cette technique d'alignement échouera si elle est utilisée sur la dernière colonne d'une table sauf si lignes de la table sont terminées par \tabularnewline au lieu de \\, qui je pense est pas le cas xtable et n'est pas facilement personnalisable grâce à une option réglable par l'utilisateur.

L'autre chose à considérer est que vous ne voulez pas toute la colonne ligne enroulée à 1,5 pouces et centered- juste l'en-tête. Dans ce cas, désactiver la désinfection de chaîne de xtable et de définir votre tête à l'aide d'une cellule de \multicolumn de largeur 1:

names(calqc_table)[1]<-"\\multicolumn{1}{>{\\centering}p{1.5in}}{Identifier of the Run within the Study}"

Autres conseils

technique de @Sharpie n'a pas fonctionné pour moi, comme pandoc échoué avec l'erreur 43 sur la conversion en pdf. Par conséquent, voici ce que je l'ai fait:

a déplacé le marqueur \\centering:

names(calqc_table)=c(rep("\\multicolumn{1}{p{0.75in}}{\\centering Identifier of the Run within the Study}", 6))

(ici appliquée à toutes les 6 colonnes du tableau)

et sanitization désactivé dans l'impression XTABLE:

print(calqc_table, sanitize.colnames.function=function(x){x})
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top