Как отключить «Сохранить изображение рабочего пространства?» подскажите в R?


95

Когда я выхожу из интерактивной оболочки R, она каждый раз отображает раздражающую подсказку:

>
>
Сохранить изображение рабочего пространства? [д / н / с]: н

Я всегда отвечаю «нет», потому что, если бы я хотел сохранить свою работу, я бы сделал это перед попыткой выхода.

Как избавиться от подсказки?


Примечание: см. ?save.image


7
@Spacedman: в Windows это Ctrl + Z, поэтому никогда не пытайтесь что-то «отменить». ;-)
Джошуа Ульрих

4
В GNU / Linux началоR --vanilla
aL3xa,

см. также этот ответ, используя настраиваемую q()функцию в .Rprofie: stackoverflow.com/a/13043239/180892
Джероми Англим,

5
что бы это ни стоило, RStudio имеет для этого крючок предпочтений
Бен Болкер

2
fwiw (также), это поведение по умолчанию в консоли Radian R.
Кейт Хьюитт,

Ответы:


76

Вы можете передать --no-saveаргумент командной строки при запуске R или переопределить qфункцию:

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

Поместите приведенный выше код в свой .Rprofile, чтобы он запускался при запуске для каждого сеанса.


2
@Sacha Так что взгляните на stackoverflow.com/questions/1189759/…
Марек

2
После того как я установил пакет Defaults и добавил указанный выше код в свой файл Rprofile.site (работающий с R 2.15.1 в Windows 7), я получил следующую ошибку: «Ошибка в bindingIsLocked (name, as.environment (find (name)) ): не удалось найти функцию «найти» »
Джон Д. Кук

2
Пакет по умолчанию был удален.
Praxeolitic

1
Я получаю сообщение «Ошибка: не удалось найти функцию assignInNamespace». R 3.1.2 для OS X
Джош Хансен

5
@Josh Hansen добавьте библиотеку (утилит) в свой .Rprofile, чтобы найти assignInNamespace
FXQuantTrader

35

Еще не нашел самого простого решения для Linux :)

В ubuntu добавьте следующую строку в свой ~/.bashrc:

alias R='R --no-save'

Каждый раз, когда вы запускаете консоль R R, ей передается --no-saveопция.


3
Или как @ aL3xa, указанный в комментарии выше, используйте R --vanillaдля объединения Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ.
Поль Руже,

25

Вы можете выйти из запроса « Сохранить изображение рабочего пространства? » С помощью Ctrl+D.

Таким образом, если вы сделаете это Ctrl+Dдважды в интерактивном R, вы выйдете из R без сохранения рабочего пространства.

(Проверено в Linux и OS X)


11

Если вы используете Rgui, щелкните правой кнопкой мыши значок, который вы используете для запуска R, выберите «Свойства» и добавьте --no-save к команде, запускающей R.

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

Если вы используете редактор, отличный от Rgui, вы должны передать --no-save в командную строку R при запуске R


Не могли бы вы поделиться скриншотом вкладки свойств?
Ашрит

8

Параметр перезаписи по умолчанию для аргумента сохранения функции выхода

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

поместите эту строку в .Rprofile

Изменить: добавлено q, поэтому нет подсказки независимо от того, какой вариант используется


> formals (выйти) $ save <- "no"> q () Сохранить изображение рабочей области? [y / n / c]:
O.rka

6

Воспользуйтесь преимуществами обеих стратегий, предложенных пользователями 1 и 2 :

По умолчанию не сохранять, добавив следующую строку в ваш ~ / .bashrc:

alias R='R --no-save'

Но дайте себе простой способ сэкономить при выходе, добавив это в ~ / .Rprofile:

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

Итак, теперь q()выйдет без сохранения или запроса, но qs()сохранится и выйдет (также без запроса)


Мне нравится как wq <- function() { q(save="yes")}зеркало vi. (также, если вы пишете функцию перезаписи, почему бы не заставить ее отправлять фиксированный аргумент)
Даннид

5

Вы можете легко добавить qq()функцию в файл .Rprofile

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

Я думал, что опция сохранения была доступна с опциями, но, видимо, ответ Джошуа лучше всего.


3

Если, как и я, ввод всей пары скобок кажется слишком большим усилием для выхода из ответа, вы можете попробовать следующее:

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

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

Это создает новый класс, который заставляет R выйти при попытке распечатать указанный класс. В результате, если вы запустите exitR repl, все завершится (потому что он пытается его распечатать).

NB: вы можете добавить его для ~/.Rprofileзагрузки в начале каждого сеанса.


2

Как насчет того, чтобы просто избежать приглашения, набрав q('no')вместо этого


21
.. что является даже большим количеством нажатий на клавиатуре, чем ответ на приглашение :-)
TMS

2

Вы можете создать псевдоним для команды R:

используя bash :alias R='R --no-save'

используя csh: alias R 'R --no-save'


-3

Если вы чувствуете себя достаточно смелым, вы также можете отредактировать startupраздел в конце /usr/bin/R, то есть добавить --no-saveк вызовам exec. Однако, если вам нужно сохранить рабочее пространство, не забудьте save.image().


1
Я никогда ничего не редактирую напрямую /usr/bin- и настоятельно не рекомендую вам делать это. Это системная зона, «посторонний персонал запрещен».
ulidtko 02

3
@ulidtko Если это моя система, я авторизован :) Я думаю, настоящая причина, по которой это не очень хорошая идея, в том, что она будет перезаписана будущими обновлениями.
Майкл Миор

@MichaelMior ну да, вы абсолютно правы; однако: люди ошибаются. Все время. Это просто руководство; если у вас нет веской причины, оставьте /usrроботов (я имею в виду менеджеров пакетов), поскольку они уже управляют этой областью. Есть способы не мешать. В противном случае вы целенаправленно ищете приключений.
ulidtko
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.