Pergunta

Eu amo a combinação Emacs ESS. Eu adoro o envio de linhas, funções, regiões e buffers de código para a linha de comando para avaliação sem usar o mouse.

No entanto, tenho notado que o comando Eval Function em Emacs é muito mais lento do que simplesmente correr source("fns.R"), onde fns.R é o arquivo que contém a função que deseja avaliar.

Por que é este o caso?

Foi útil?

Solução

Eu acho que o pessoal da ess ter melhores respostas para você. Mas se você avaliar de forma invisível, o processamento é muito mais rápida. Tente colocar isso no seu arquivo .emacs:

(setq ess-eval-visibly-p nil)

Outras dicas

Eu estou apenas supondo, mas quando você diz

  • source("fns.R") você não está envolvendo Emacs / ESS em tudo e o tempo de computação é apenas o momento R leva para gole no arquivo e para digeri-lo - provavelmente muito pouco, enquanto

  • Eval Function passa uma região para o interpretador Emacs que tem de enviá-lo (presumivelmente linha-a-linha) para o motor R, que, em seguida, digere-lo em forma fragmentada.

e que faria a segunda abordagem mais lenta.

No entanto, no grande esquema das coisas, quem se importa? Costumo enviar buffers inteiras ou grandes regiões, e que leva talvez uma grande parte de um segundo? Eu ainda acho que --- apenas como você diz --- que a capacidade para o editor (rica) ea língua subjacente para interagir dessa forma é algo extremamente poderoso.

Kudos para os hackers Emacs ea equipe ESS.

Se você quiser executar seu buffer inteiro - se você estiver em Unix / Linux, você também pode começar o seu roteiro com um shebang:

#!/usr/bin/Rscript

E fazer o seu arquivo executável

chmod 744 myscript.r

(Lembro-me de ler Google gosta de seus scripts R terminar em .R mas tudo bem ...) e você pode executá-lo desta maneira:

./myscript.r

E, com argumentos,

./myscript.r arg1 arg2

(que eu realmente utilizado para invocar uma função R de uma chamada de sistema Matlab) e no seu arquivo de R que você pode usar

userargs = tail(commandArgs(),2) 

para obter arg1 e arg2. Você também pode fazer sem o shebang:

R --no-save < myscript.r arg1 arg2

e assim por diante. Com o Windows Lembro-me de que era

R CMD BATCH myscript.r

ou algo nesse sentido ... Eu notei um pequeno atraso ao executar comandos através de ESS (embora eu faço amor ESS caro ) então quando eu sei que eu quero executar a toda tampão I às vezes iniciar um shell em uma janela abaixo do roteiro R (onde o buffer de R normalmente residem) e usar os truques acima.

Você também pode usar

echo 'source("myscript.r")' | R --no-save

, bem como - o benefício de usar estes métodos mais funcionando 'fonte ( 'myscript.r')' diretamente em R ou um buffer de R é que você está começando com um espaço de trabalho claro (embora você deve ter cuidado para que o seu. Rprofile não será carregado a menos que você chamar de 'fonte ( '~ / .Rscript')' explicitamente em 'myscript.r'), assim você pode ter certeza que seu script é auto-suficiente (que chama as bibliotecas adequadas, o seu léxico-escopo funções não estão fazendo referência variáveis ??inesperadas no espaço global que você se esqueceu de remover, e assim por diante).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top