Domanda

Adoro la combinazione Emacs ESS. Adoro inviare righe, funzioni, regioni e buffer di codice alla riga di comando per la valutazione senza usare il mouse.

Tuttavia, ho notato che il comando Eval Function in Emacs è molto più lento della semplice esecuzione di source (" fns.R ") , dove fns.R è il file che contiene la funzione che voglio valutare.

Perché è così?

È stato utile?

Soluzione

Penso che le persone nella ess list abbiano risposte migliori per te. Ma se si valuta invisibilmente, l'elaborazione è molto più veloce. Prova a metterlo nel tuo file .emacs:

(setq ess-eval-visibly-p nil)

Altri suggerimenti

Sto solo indovinando ma quando dici

  • source (" fns.R ") non stai coinvolgendo Emacs / ESS e il tempo di calcolo è solo il tempo che R impiega per digerire il file e digerirlo - probabilmente molto poco, mentre

  • Eval Function passa una regione all'interprete Emacs che deve inviarla (presumibilmente riga per riga) al motore R che la digerisce in modo frammentario.

e ciò renderebbe il secondo approccio più lento.

Eppure, nel grande schema delle cose, a chi importa? Mando spesso interi buffer o aree estese, e questo richiede forse gran parte del secondo? Continuo a pensare --- proprio come dici tu --- che la capacità per l'editor (ricco) e il linguaggio sottostante di interagire in quel modo è qualcosa di estremamente potente.

Complimenti agli hacker Emacs e al team ESS.

Se vuoi eseguire tutto il tuo buffer - se sei in Unix / Linux, puoi anche iniziare lo script con un shebang:

#!/usr/bin/Rscript

E rendi il tuo file eseguibile

chmod 744 myscript.r

(Ricordo che leggendo Google piace che i loro script r finiscano in .R ma vabbè ...) e puoi eseguirlo in questo modo:

./myscript.r

E, con argomenti,

./myscript.r arg1 arg2

(che ho usato per invocare una funzione R da una chiamata di sistema Matlab) e nel tuo file R potresti usare

userargs = tail(commandArgs(),2) 

per ottenere arg1 e arg2. Puoi anche fare a meno dello shebang:

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

e così via. Con Windows ricordo che era

R CMD BATCH myscript.r

o qualcosa in tal senso ... Ho notato un po 'di ritardo durante l'esecuzione dei comandi tramite ESS (anche se adoro ESS caro ), quindi quando so che voglio eseguire l'intero buffer a volte avvia una shell in una finestra sotto lo script R (dove normalmente risiederebbe il buffer R) e usa i trucchi sopra.

Puoi anche usare

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

- il vantaggio di usare questi metodi nell'esecuzione di 'source (" myscript.r ")' direttamente in R o in un buffer R è che stai iniziando con uno spazio di lavoro chiaro (anche se dovresti stare attento che il tuo Il profilo non verrà caricato a meno che tu non chiami 'source (" ~ / .Rscript ")' esplicitamente in 'myscript.r') in modo da poter essere sicuro che lo script sia autonomo (chiama le librerie appropriate, il tuo lessico -scoped le funzioni non fanno riferimento a variabili indesiderate nello spazio globale che hai dimenticato di rimuovere e così via).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top