Executando um Script R Linha por Linha

8

Acabei de descobrir como executar um script R no R Console no Windows.

source("arrrFile.R")

O problema é que esse comando é executado "silenciosamente". Como posso executar o arquivo comando por comando, como eu digitaria no console?

Fabian
fonte
5
Você já tentou source("arrFile.R", echo=TRUE)?
Caracal
(+1) @caracal, de alguma forma perdeu essa opção :) não há necessidade de colocar printno arquivo de origem, a menos que alguma saída não seja interessante.
Dmitrij Celov

Respostas:

16

Você pode usar o depurador interno do R; deve ser acionado em uma função, portanto, é necessário um pequeno invólucro:

sourceDebugging<-function(f){
 #Function to inject the code to
 theCode<-function(){}
 #Injection
 parse(text=c('{',readLines(f),'}'))->body(theCode)
 #Triggering debug
 debug(theCode)
 #Lift-off
 theCode()
}
sourceDebugging(<file with code>)

Isso é bastante útil para depuração (dá a você a chance de inspecionar o estado após cada linha), no entanto, será avaliado apenas em um ambiente novo, e theCodenão sourceno padrão .GlobalEnv... isso significa, por exemplo, que as variáveis ​​criadas dentro desaparecerão, a menos que globalmente explicitamente.

A opção dois é apenas emular a escrita do teclado e pressionar ENTER ... mas como caracal apontou, isso pode ser alcançado apenas com source(<file with code>,echo=TRUE).


fonte
(+1) também é recomendável para gravar os arquivos de origem como as funções e, em seguida, debug() browser()são úteis :)
Dmitrij Celov
1
Também baunilha, mostra como um comando executar linha por linha R-2.12 --vanilla <yourfile.R
user4581
1
algum método para passar também parâmetros?
GC5
Parece que os números são deslocados em 1 devido à definição da função. Existe uma maneira inteligente de contornar isso?
irritable_phd_syndrom
10

Abra o arquivo de script dentro do seu RGui e pressione Ctrl + R para executar linha por linha (você precisa pressionar várias vezes;)). No entanto, eu recomendaria usar o RStudio para o trabalho conveniente com R. Nesse caso, você executa a linha com Ctrl + Enter . Ou você pode modificar seu script para print()(ou cat()) os objetos.

Dmitrij Celov
fonte