Como inserir eficientemente uma tabela de R em um documento do Word?

3

Estou criando um documento do Word (.docx) usando o LibreOffice. Eu preciso incluir alguns resultados numéricos que eu calculei em R. Eles se parecem com uma simples tabela de números, com legendas para as linhas e colunas, e alguns NAs aqui e ali (uma string representando a constante "valor faltante" de R).

Eu tentei salvar a tabela no disco em formato .csv, abrindo-a no LibreOffice Calc e copiando e colando-a no Writer. Ele foi inserido como um objeto OLE. Isso tem vários problemas. Primeiro, isso significa que o documento é grande e lento para abrir. Segundo, tenho medo de problemas de compatibilidade (não confio que o objeto OLE funcionará bem quando alguém ler essa coisa com o Word em vez do LibreOffice). Terceiro, formata os números na tabela como números (ajustados à direita), mas os valores de NA como texto (ajustados à esquerda) e também todos os números em uma linha contendo NA como texto. Por isso, é muito difícil de ler, pois as colunas não se alinham.

Eu sei que posso criar uma tabela no LibreOffice e copiar e colar os números lá. Mas existe uma solução mais rápida, talvez algum addon do Word que crie automaticamente tabelas a partir de .csv, ou talvez uma maneira de salvar a saída R como uma tabela HTML (aquelas formatadas automaticamente quando coladas no LibreOffice)? Eu não preciso de looks extravagantes, desde que tudo esteja alinhado e crie uma tabela nativa do Word.

    
por rumtscho 17.09.2012 / 15:09

2 respostas

1

Você poderia simplesmente abrir o .csv no LibreOffice (escritor), selecionar todos e clicar no item assistente de tabela:

Nomeucaso,issoresultouem:

Quanto à forma HTML, o seguinte script PERL fará o que você precisa (suponho que você esteja no Linux e tenha um arquivo .csv separado por espaço):

#!/usr/bin/perl -w
print <<EOF;
<html>
<head>
<style>
TABLE{
border-collapse:collapse;

}
TD{
border:1px solid black;
padding:3px;
text-align:left;
}
</style>
</head>
<body>
<table>

EOF
while(<>){
    chomp; 
    print "<tr>";
    my @a=split(/\s+/); 
    print "<td>$_</td>" foreach (@a);
    print "</tr>\n";
}
print "</table></body></html>\n";

Salve o script como csv2html.pl e execute-o da seguinte maneira:

$ perl csv2html.pl input.csv > output.html
    
por 17.09.2012 / 15:23
2

O LibreOffice também tem uma funcionalidade Colar Especial (duh). Ele permite que eu escolha "texto formatado" ou "HTML" em vez de "calc8" ao colar uma tabela copiada do Calc. Eu ainda prefiro a solução de script, porque Colar Especial usa a formatação presente no Calc, onde as linhas com um NA são alinhadas à esquerda e as linhas com números são alinhadas apenas à direita.

    
por 02.10.2012 / 19:16