Em um dos meus trabalhos, listo alguns resultados numéricos, além de algumas figuras. O que eu gostaria de fazer é garantir que os resultados numéricos no meu artigo sempre estejam de acordo com o código. No momento, apenas copio diretamente os resultados numéricos da minha saída de simulação para o papel, o que é extremamente simples e de baixa tecnologia, mas propenso a erros, porque eu poderia copiar incorretamente os resultados ou esquecer de sincronizar os resultados do papel com o saída de código.
Existe uma boa maneira de manter os resultados numéricos citados em meus artigos em sincronia com os resultados gerados pelo meu código? (Suponho que a execução do código seja fácil e prática sempre que eu quiser atualizar meu artigo.) Esses resultados numéricos não se prestam necessariamente à forma de tabela. Às vezes, tenho tabelas em manuscritos, mas, mais comumente, tenho parâmetros de simulação listados como números em equações . Um exemplo seria algo como:
onde gostaria de substituir os elementos da condição inicial pelos parâmetros reais que utilizo em uma simulação que integra numericamente um sistema de equações diferenciais ordinárias. Usar uma tabela para dados pontuais, como este exemplo, parece um exagero e mais tinta do que o necessário.
Presumo que os números sejam um caso mais fácil: sempre que o documento for "construído" (da fonte do LaTeX, Markdown, RST etc.), inicie o processo de criação executando o código. No entanto, se as pessoas tiverem melhores sugestões para manter os números gerados pelas minhas simulações sincronizados com o meu artigo, eu adoraria ouvi-los.
fonte
spin()
função. Pessoalmente, acho que as queixas de Greg Wilson sobre programação alfabetizada são bastante antigas. Eu tive a mesma experiência terrível que ele descreve com o noweb, mas essa depuração complicada simplesmente não existe nas ferramentas modernas. Para IC alfabetizado, use doxygen. Knitr é, se algo mais fácil de depurar do que R, graças ao armazenamento em cache e manipulação de ambiente.O que você está pedindo é o grande desafio da Elsivier do "Documento executável" . Embora muitas abordagens tenham sido tentadas, nenhuma é tão convincente quanto os autores podem sugerir. Aqui estão alguns exemplos de técnicas usadas.
O Projeto Madagascar adota sua abordagem, dentro do script make são executadas as simulações que produzem as figuras e o papel simultaneamente.
O IPython Notebook fornece um documento que você pode executar enquanto lê e produz figuras para o conteúdo do seu coração. (Vi plugins de palavras, Mathematica e várias outras soluções usadas da mesma maneira)
O VisTrails usa uma abordagem de arquitetura orientada a serviços e fornece um gerenciador de "providência" ou "fluxo de trabalho". Basicamente, você registra ganchos no código e cria um fluxo de trabalho ou experimento que reproduz seu trabalho. Ele foi usado em muitos tipos de códigos, mesmo em clusters HPC. Com essa abordagem, você terá uma maneira de reproduzir os experimentos.
Existem toneladas desse tipo de soluções por aí, mas essas três ficaram impressionadas. É um problema difícil e acredito que realmente não estamos nem perto de resolver. Não podemos nem levar as pessoas a liberar seu código com seus papéis, como podemos esperar que elas reproduzam os resultados = P
fonte
Não tive muito sucesso ao usar as soluções de outras pessoas para esse problema. Normalmente, eu só quero algo simples que funcione para mim e faça o trabalho. Para esse fim, geralmente tento escrever um script python encarregado de executar todos os resultados, analisar a saída e criar as figuras / tabelas.
Escrevo meus códigos para gerar arquivos de dados que contêm os resultados em algum formato de texto. Você pode evitar executar novamente esses resultados em seu script testando primeiro a existência do arquivo de saída (em python, usando os.path.isfile () por exemplo). Se você deseja executar novamente seus resultados, basta remover os arquivos de dados. Se os arquivos de dados existirem, eu executo um analisador desses arquivos. Para isso, o módulo python para expressões regulares é muito útil (re).
A partir da saída analisada, crio as figuras ou tabelas. Para tabelas em látex, você pode escrever o código para gerar a tabela em um arquivo separado (eu uso uma extensão .tbl) e incluí-la no seu arquivo de látex. A chave para mim é usar um script python. Se tenho muitos, mais tarde me pergunto qual é qual e o que eles fazem. Se essa descrição for muito vaga, posso enviar alguns exemplos.
fonte
\input{|"path-to-script.py"}
. Eu acho melhor você colocar todos os parâmetros em um único arquivo python (ou qualquer que seja o idioma que você mais goste) e usar o parâmetro de linha de comando para acessá-lo dessa maneira\input{|"path-to-script.py param-name"}
. Nesse caso, você pode incluir o arquivo param em outros scripts para executar as simulações. No entanto, torna a compilação mais lenta e possui outros pontos negativos.Ainda mais importante, na minha opinião, é garantir que você possa descobrir como gerar novamente todos os seus resultados a partir do zero em um mês ou um ano (por exemplo, quando os árbitros pedem que você adicione ou modifique algo). Para isso, o que faço é incluir um arquivo de texto com instruções muito detalhadas sobre como reproduzir todos os resultados. É melhor se você testá-las fazendo com que outra pessoa (como um co-autor) as experimente. Eu recomendo que você também forneça essas instruções (e todo o seu código) para árbitros e leitores.
Aqui está um exemplo (realmente preparado por meu co-autor, Aron Ahmadia).
fonte
O orgmode do Emacs em combinação com Babel alcança isso. O Babel pode executar trechos de código de várias linguagens de programação e script, por exemplo, ele pode abrir o arquivo que contém os dados da simulação e colocá-lo em uma tabela no modo orgânico, que pode ser exportado para o LaTeX (e muitos outros formatos). Demora um pouco para se acostumar com todos os combos de teclas no modo org, mas, uma vez executado, tudo é automático.
fonte
Se executar todo o seu código for barato, você poderá fazer algo de baixa tecnologia, como o seguinte:
Você pode modelar seus documentos com seqüências de caracteres formatadas para que elas se pareçam com isso
Tenha scripts python que se parecem com isso
E então faça algo assim
Você pode então encerrar isso em um Makefile.
fonte
Se você estiver usando o LaTeX, uma solução relativamente de baixa tecnologia é fazer com que seu código cuspa um arquivo (ou use um script para filtrar a saída do código) contendo um monte de linhas como esta:
\newcommand{\myresults1}{<value>}
Em seguida, você pode usar o
\input
comando para adicionar esse arquivo ao seu documento e usar os comandos definidos para colocar os valores.fonte
Eu trabalho para a Elsevier. Minha empresa começou a usar a estrutura Collage (desenvolvida em resposta ao Executable Paper Grand Challenge) em edições de periódicos para permitir que os autores publiquem partes do código executável em seus artigos. Esse recurso facilita a reprodução dos resultados relatados no artigo e a reutilização do material publicado para sua própria pesquisa. O Collage suporta uma ampla variedade de software proprietário e de código aberto; mais informações podem ser encontradas no vídeo informativo aqui e no site do ambiente de criação de colagens .
fonte