Como desativar “Salvar imagem do espaço de trabalho?” prompt em R?

92

Quando saio do shell R interativo, ele exibe um prompt irritante todas as vezes:

>
>
Salvar imagem do espaço de trabalho? [s / n / c]: n

Estou sempre respondendo "não" a ele, porque se quisesse salvar meu trabalho, faria isso antes de tentar sair.

Como se livrar do prompt?


Nota: veja ?save.image

Ulidtko
fonte
7
@Spacedman: é Ctrl + Z no Windows, então nunca tente "desfazer" nada. ;-)
Joshua Ulrich
3
No GNU / Linux, inicieR --vanilla
aL3xa
veja também esta resposta usando a q()função personalizada em .Rprofie: stackoverflow.com/a/13043239/180892
Jeromy Anglim
5
pelo que vale a pena, RStudio tem um gancho de preferências para isso
Ben Bolker
2
fwiw (também), este é o comportamento padrão no console R radiano .
Keith Hughitt

Respostas:

76

Você pode passar o --no-saveargumento da linha de comando ao iniciar o R ​​ou pode substituir a qfunção:

utils::assignInNamespace(
  "q", 
  function(save = "no", status = 0, runLast = TRUE) 
  {
    .Internal(quit(save, status, runLast))
  }, 
  "base"
)

Coloque o código acima em seu .Rprofile para que ele seja executado na inicialização de cada sessão.

Joshua Ulrich
fonte
2
@Sacha Então dê uma olhada em stackoverflow.com/questions/1189759/…
Marek de
2
Depois de instalar o pacote Defaults e adicionar o código acima ao meu arquivo Rprofile.site (executando R 2.15.1 no Windows 7), recebo o seguinte erro: "Erro em bindingIsLocked (name, as.environment (find (name)) ): não foi possível encontrar a função 'encontrar' "
John D. Cook
2
O pacote Defaults aparentemente foi removido.
Praxeolitic
1
Estou recebendo "Erro: não foi possível encontrar a função" assignInNamespace "". R 3.1.2 no OS X
Josh Hansen
5
@Josh Hansen adiciona biblioteca (utils) ao seu .Rprofile para localizar assignInNamespace
FXQuantTrader
31

Ainda não encontrei a solução Linux mais fácil :)

No ubuntu, adicione a seguinte linha ao seu ~/.bashrc:

alias R='R --no-save'

Cada vez que você iniciar o console R com R, a --no-saveopção será passada .

mreq
fonte
2
Ou como @ aL3xa especificado em um comentário acima, use R --vanillapara combinar Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ.
Paul Rougieux
23

Você pode escapar do prompt " Salvar imagem do espaço de trabalho? " Com um Ctrl+D.

Portanto, se você fizer Ctrl+Dduas vezes no R interativo, sairá do R sem salvar sua área de trabalho.

(Testado em Linux e OS X)

Hugo Ideler
fonte
11

Se você estiver usando Rgui, clique com o botão direito do mouse no ícone que você usa para iniciar R e clique em "Propriedades" e adicione --no-save ao comando que inicia R.

(de http://tolstoy.newcastle.edu.au/R/help/05/03/1115.html )

Se você estiver usando um editor diferente do Rgui, você deve passar --no-save para a linha de comando do R ao iniciar o R

Andrie
fonte
Você pode compartilhar uma captura de tela da guia de propriedades?
Ashrith
8

Substituir a opção padrão para salvar o argumento da função de saída

formals(quit)$save <- formals(q)$save <- "no"

coloque esta linha em .Rprofile

Editar: adicionado q, portanto, não há prompt, não importa qual variante é usada

Pafnucy
fonte
> formals (quit) $ save <- "no"> q () Salvar imagem da área de trabalho? [s / n / c]:
O.rka
5

Você pode facilmente adicionar uma qq()função ao arquivo .Rprofile

 qq <- function(save="no") { q(save=save)}

Eu pensei que a opção de salvar estava disponível com opções, mas aparentemente a resposta de Joshua é a melhor.

IRTFM
fonte
5

Obtenha o melhor de ambas as estratégias fornecidas por mreq e BondedDust :

O padrão é não salvar adicionando a seguinte linha ao seu ~ / .bashrc:

alias R='R --no-save'

Mas dê a si mesmo uma maneira fácil de economizar ao sair adicionando isso a ~ / .Rprofile:

qs <- function(save="yes") { q(save=save)}

Então, agora q()fecha sem salvar (ou perguntar), mas qs()vai salvar e sair (também sem perguntar)

dedo voador
fonte
3

Que tal apenas evitar o prompt digitando em q('no')vez disso

Stedy
fonte
20
.. que é ainda mais batidas no teclado do que responder ao prompt :-)
TMS
3

Se, como eu, digitar um par inteiro de colchetes parece muito esforço para sair do repl, você pode tentar isto:

exit <- structure(list(), class = "exit_command")

print.exit_command <- function(...) {
  q("no")  # exit without saving
}

Isso cria uma nova classe, que faz com que R saia ao tentar imprimir essa classe. O resultado é que se você rodar exitno R repl, a coisa toda vai sair (porque ele tenta imprimir).

NB: você pode adicioná-lo ~/.Rprofilepara carregar no início de cada sessão.

Snakeoilsales
fonte
2

Você pode criar um alias para o comando R:

usando bash :alias R='R --no-save'

usando csh: alias R 'R --no-save'

feiticeiro
fonte
-2

Se você se sentir aventureiro o suficiente, também pode editar a startupseção no final de /usr/bin/R, ou seja, adicionar --no-saveàs chamadas de exec. No entanto, se você precisar salvar seu espaço de trabalho, lembre-se de save.image().

Bijoy J
fonte
1
Eu nunca edito diretamente nada sob /usr/bin- e te desencorajo fortemente de fazer isso. Essa é a área do sistema, "pessoal não autorizado é proibido".
ulidtko
3
@ulidtko Se for o meu sistema, estou autorizado :) Acho que o verdadeiro motivo pelo qual não é uma boa ideia é porque será sobrescrito por atualizações futuras.
Michael Mior
@MichaelMior bem sim, você está absolutamente correto; entretanto: humanos bagunçam. O tempo todo. É simplesmente uma orientação; a menos que você tenha um bom motivo, deixe /usrpara os robôs (quero dizer, os gerenciadores de pacotes), uma vez que eles já gerenciam essa área. Existem maneiras de não interferir. Caso contrário, você está procurando aventuras propositalmente.
ulidtko