Por dentro do trama

Por dentro do trama

Como o trama é instalado, o que roda no CLI e o caminho de um fluxo, do comando ao resultado no card.

O trama é um pacote R para construir e executar fluxos de computação em um editor visual. Esta seção reúne o que fica por trás da tela: como instalar, como o CLI ajuda quem ainda não tem R e como um fluxo é executado por dentro.

Instalação no R

O pacote requer R 4.1 ou versão posterior. Enquanto não estiver disponível no CRAN, a instalação é feita pelo GitHub com o pak:

install.packages("pak")

pak::pak(c(
  "uaipedro/trama",
  "uaipedro/trama/collections/trama.data",
  "uaipedro/trama/collections/trama.view"
))

As demais coleções são opcionais e instalam suas próprias dependências: trama.series, trama.models, trama.multi, trama.sampling, trama.experiments e trama.ml. Detalhes e a ordem de instalação com remotes estão em Instalação.

O CLI

Quem ainda não tem R instalado pode usar o trama-cli, um pacote npm que baixa um R portátil e instala o núcleo do trama:

npm install -g @uaipedro/trama-cli
trama create meu-fluxo

trama create cria a pasta do projeto, pergunta quais coleções acrescentar e abre o editor. A lista completa de comandos está em Instalação.

Como um fluxo roda

Um fluxo organiza funções R em um diagrama de blocos conectados. Três peças sustentam essa organização:

Registro. tr_registry() cria um registro vazio; tr_use("trama.data", registry = reg) carrega os tipos, blocos e renderizadores de uma coleção nele. tr_app() e tr_project() criam esse registro automaticamente para o editor.

Documento. tr_flow(reg), tr_add() e tr_link() descrevem o fluxo como um documento — os mesmos que o editor visual produz e que também podem ser escritos como JSON. tr_add() liga a primeira saída à primeira entrada compatível de um bloco pelo argumento from; tr_link() cobre as demais ligações e tr_set() altera parâmetros depois de criado o bloco.

Execução. A cada alteração, o núcleo recalcula só os nós afetados:

comando → documento → plano (hash por nó) → fila → workers
                                                     ↓
                                store: <hash>.artefato + <hash>.preview
                                                     ↓
                                              eventos → front

Cada nó tem uma chave de conteúdo (hash) derivada de si e de suas entradas. Um worker executa a função do bloco fora do processo da interface, grava o artefato e o preview sob essa chave no armazenamento e devolve apenas o identificador. A interface escuta os eventos e atualiza somente os cards que mudaram.

Esse protocolo é o que permite que o editor visual, o documento JSON e a DSL em R representem exatamente o mesmo fluxo, sem transferir objetos R ativos entre processos.

Fontes e conferência das contas

Cada bloco estatístico compara a sua conta com um resultado publicado e cita a fonte do método. Etapas de validação descreve essa conferência e traz o registro de revisão metodológica; Referências lista todas as obras citadas e os blocos que as usam.