Ну, вы можете очистить свое рабочее пространство, rm(list=ls())но вы не это имеете в виду, верно?
Sacha Epskamp
2
Вы также хотите отсоединить какие-либо пакеты и другие вещи, которые вы могли прикрепить?
Spacedman
2
Возможно, одним из предложений было бы добавить новый saveпараметр option q(), например "r", который перезапускает R без сохранения рабочей области. Тогда псевдоним для q("r")можно было бы назначить новой функции, которая перезапускает R.
Я считаю, что для открытия «чистого сеанса R» необходимо удалить 1-данные из текущего сеанса; 2-Пакеты из текущего сеанса выгружаются. .rs.restartR()похоже, что ни то, ни другое не выполняет на моей машине ..
stablefish
3
Я считаю .rs.restartR () полезным в случаях, когда R не освобождает память даже после удаления (list = ls ()); gc () ;. Это определенно освобождает память. Мне также нравится то, что он не отсоединяет пакеты.
Ричард ДиСальво,
56
В зависимости от того, как вы запускаете R, попробуйте поместить в .Rprofileфайл одну из этих строк :
или .Last <- function() system("R")даже позже в цикле выключения reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE). Потом q()продолжает возвращаться.
Мартин Морган
1
Убедитесь, что R находится на вашем пути.
Г. Гротендик
2
Это решение работает, но не воспроизводится, когда мой скрипт запускают другие. Есть ли команда, которую нужно включить в сценарий R для перезапуска сеанса R? (причина в том, что я хочу, чтобы все пакеты были отделены)
Гейзенберг
13
Я обнаружил, что .rs.restartR () работает аналогично нажатию ctrl + shift + F10. но доза не выгружать пакеты
Работает в RStudio, но я не уверен, что есть способ заставить его работать где-нибудь еще. От getAnywhere(".rs.restartR")него вроде бы в tools:rstudio. Мне не удалось получить доступ к этому в сеансе чистого R.
Грегор Томас
11
.rs.restartR()не выгружает пакеты, поэтому это не совсем то же самое, чтоctrl+shift+f10
Артур
5
В качестве другой альтернативы Emacs ESS (> = 16.10) может перезагружать подчиненный процесс R, через inferior-ess-r-reload-hookкоторый C-c C-e C-rпо умолчанию привязан .
Старый пост, но ни один из ответов не работает (для меня я использую Windows, другие не тестировал), поэтому я добавлю свое решение. Некоторые из моих терминов могут здесь отсутствовать, но это должно прояснить суть:
Выше ответы не совсем работают
Большинство представленных здесь ответов связаны с использованием shellили, systemчто не совсем работает, потому что, хотя они открывают новую консоль R и инструктируют исходную консоль о закрытии, новая консоль - это процесс, выполняющийся в контексте приложения старой консоли. Это означает, что исходная консоль не может закрыться, пока не закроется новая консоль. Некоторые из вышеупомянутых пользователей, такие как hedgedandlevered, сообщили, что закрытие исходной консоли приводит к закрытию новой консоли. Когда я пытаюсь открыть новую консоль, старая консоль остается открытой в замороженном состоянии, пока новая консоль не будет закрыта.
Основная проблема заключается в вызове shellили systemотсутствии изменения контекста приложения с исходной консоли на новую, и поэтому исходный процесс не может завершиться, пока не закроется новая консоль.
Альтернатива, которая мне подходит
Вместо этого используйте то, shell.execчто обычно используется для открытия файла в приложении по умолчанию в зависимости от типа файла. При использовании с .exe, по-видимому, запускает исполняемый файл. Однако важное отличие заключается в том, что система запускает приложение в собственном отдельном контексте. Итак, вот код, который мне подходит:
Вам нужно будет отредактировать путь /bin/x64/Rgui.exeк файлу, чтобы он соответствовал тому, что вы используете для запуска R. Вы просто помещаете эту строку в свой .Rprofileфайл, затем вы можете вызвать ее, введя restart.Rсвой R-код.
Обратной стороной этого метода по сравнению с другими методами является то, что вы не можете передавать аргументы командной строки, --no-saveкак если бы это было просто shell, но, по крайней мере, это позволит вам закрыть исходный процесс R.
После поиска решения этой проблемы я решил свою проблему на основе этого решения здесь , используя R Package RDCOMClient . Приведенное ниже решение работает только в RStudio (Windows), как только оно имитирует нажатия клавиш ctrl + shift + F10 .
Пакет RDCOMClient должен быть установлен с помощью следующей команды:
В последней строке приведенного выше кода клавиша «ctrl» представлена символом «^», а клавиша Shift - знаком «+». Все объяснения этих ключевых представлений доступны здесь .
Согласно комментарию @steadyfish, сразу после запуска последней строки приведенного выше кода весь сеанс R в RStudio будет сброшен . То есть он удаляет все данные из текущего сеанса и выгружает все загруженные пакеты в сеансе.
В Windows вам нужно изменить Rprofile.siteфайл. Он находится в etcкаталоге R. Также обратите внимание на последнюю часть пути, которая bin/x64может измениться в соответствии с конфигурацией вашей системы. Надеюсь, это поможет и другим.
В соответствии с идеей Мартина Моргана об использовании .Last(); это перезапускает R с тем же набором параметров командной строки, что и ранее:
restart_r <- function(status = 0, debug = TRUE) {
if (debug) message("restart_r(): Customizing .Last() to relaunch R ...")
assign(".Last", function() {
args <- commandArgs()
system2(args[1], args = args[-1])
}, envir = globalenv())
if (debug) message("restart_r(): Quitting current R session and starting a new one ...")
quit(save = "no", status = status, runLast = TRUE)
}
К вашему сведению, я добавил startup::restart()в стартовый пакет как
удобный
1
Я думаю, что лучше всего использовать R, задав текущий рабочий каталог в параметрах. Затем всякий раз, когда ваше рабочее пространство / файл сеанса начинает показывать вас или в нем достаточно вашей работы (между проектами), вы можете просто переименовать этот файл сеанса по умолчанию в рабочем каталоге после закрытия R, и R / Rstudio автоматически запустит вас в новом файл рабочей области / сеанса, не мешая вашей текущей работе.
Не забудьте выйти из R и переименовать файл текущего сеанса
Конечно, если вы не хотите сохранять текущую работу, вам нужно убедиться, что вы сбросили объекты или операции с ними были выполнены после копирования из исходных объектов, чтобы они остались такими, как есть. Поверьте, знание того, что вы всегда можете загрузить старые рабочие места, - соблазн, но полезнее, чем нет.
Короче говоря, выход из R дает вам некоторый пробел, а выход означает, что это рабочее пространство заполнено, переименуйте его после завершения выхода и перезапустите R / Rstudio с новым рабочим пространством. Вы всегда можете загрузить выбранные объекты в новое рабочее пространство. В идеале вся важная работа должна быть в каталогах проектов, но вам все равно нужна история ваших заданий, чтобы время от времени возвращаться к ней, и сохраненные сеансы пригодятся в какой-то момент, когда вы будете работать над более длинными проектами. Если вам это не нужно, простоrm(list=ls())
Также мне нравится RDComClientидея @Eduardo Alvin, но она больше не поддерживается.
АЛЬТЕРНАТИВНЫЙ ВАРИАНТ
Простая альтернатива избавиться от багажа в любое время на рабочем месте - использовать save.image
Я думаю, это то, что вам нужно, если вы использовали setwd () перед вызовом обновления (хотя ни эта, ни исходная версия у меня не работают, поскольку он перезапускает R, а затем закрывается, новое окно никогда не открывается. Если кто-то может прокомментировать это, пожалуйста, сделайте это)
rm(list=ls())
но вы не это имеете в виду, верно?save
параметр optionq()
, например"r"
, который перезапускает R без сохранения рабочей области. Тогда псевдоним дляq("r")
можно было бы назначить новой функции, которая перезапускает R.Ответы:
Если вы в RStudio: command / ctrl + shift + F10
Вы также можете использовать
источник
.rs.restartR()
похоже, что ни то, ни другое не выполняет на моей машине ..В зависимости от того, как вы запускаете R, попробуйте поместить в
.Rprofile
файл одну из этих строк :makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv) makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
Затем введите это в консоль R:
завершит текущий сеанс и запустит новый.
источник
.Last <- function() system("R")
даже позже в цикле выключенияreg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. Потомq()
продолжает возвращаться.Я обнаружил, что .rs.restartR () работает аналогично нажатию ctrl + shift + F10. но доза не выгружать пакеты
источник
getAnywhere(".rs.restartR")
него вроде бы вtools:rstudio
. Мне не удалось получить доступ к этому в сеансе чистого R..rs.restartR()
не выгружает пакеты, поэтому это не совсем то же самое, чтоctrl+shift+f10
В качестве другой альтернативы Emacs ESS (> = 16.10) может перезагружать подчиненный процесс R, через
inferior-ess-r-reload-hook
которыйC-c C-e C-r
по умолчанию привязан .источник
Старый пост, но ни один из ответов не работает (для меня я использую Windows, другие не тестировал), поэтому я добавлю свое решение. Некоторые из моих терминов могут здесь отсутствовать, но это должно прояснить суть:
Выше ответы не совсем работают
Большинство представленных здесь ответов связаны с использованием
shell
или,system
что не совсем работает, потому что, хотя они открывают новую консоль R и инструктируют исходную консоль о закрытии, новая консоль - это процесс, выполняющийся в контексте приложения старой консоли. Это означает, что исходная консоль не может закрыться, пока не закроется новая консоль. Некоторые из вышеупомянутых пользователей, такие как hedgedandlevered, сообщили, что закрытие исходной консоли приводит к закрытию новой консоли. Когда я пытаюсь открыть новую консоль, старая консоль остается открытой в замороженном состоянии, пока новая консоль не будет закрыта.Основная проблема заключается в вызове
shell
илиsystem
отсутствии изменения контекста приложения с исходной консоли на новую, и поэтому исходный процесс не может завершиться, пока не закроется новая консоль.Альтернатива, которая мне подходит
Вместо этого используйте то,
shell.exec
что обычно используется для открытия файла в приложении по умолчанию в зависимости от типа файла. При использовании с .exe, по-видимому, запускает исполняемый файл. Однако важное отличие заключается в том, что система запускает приложение в собственном отдельном контексте. Итак, вот код, который мне подходит:makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)
Вам нужно будет отредактировать путь
/bin/x64/Rgui.exe
к файлу, чтобы он соответствовал тому, что вы используете для запуска R. Вы просто помещаете эту строку в свой.Rprofile
файл, затем вы можете вызвать ее, введяrestart.R
свой R-код.Обратной стороной этого метода по сравнению с другими методами является то, что вы не можете передавать аргументы командной строки,
--no-save
как если бы это было простоshell
, но, по крайней мере, это позволит вам закрыть исходный процесс R.источник
После поиска решения этой проблемы я решил свою проблему на основе этого решения здесь , используя R Package RDCOMClient .
Приведенное ниже решение работает только в RStudio (Windows), как только оно имитирует нажатия клавиш ctrl + shift + F10 .
Пакет RDCOMClient должен быть установлен с помощью следующей команды:
install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")
Код для имитации нажатия клавиш в RStudio (Windows 10):
library(RDCOMClient) wsh <- COMCreate("Wscript.Shell") wsh$SendKeys("^+{F10}")
В последней строке приведенного выше кода клавиша «ctrl» представлена символом «^», а клавиша Shift - знаком «+». Все объяснения этих ключевых представлений доступны здесь .
Согласно комментарию @steadyfish, сразу после запуска последней строки приведенного выше кода весь сеанс R в RStudio будет сброшен . То есть он удаляет все данные из текущего сеанса и выгружает все загруженные пакеты в сеансе.
источник
Запишите эту функцию в свой .Rprofile
r <- function() { assign('.Last', function() {system('R')}, envir = globalenv()) quit(save = 'no') }
r()
перезапускает ваш R-сеанс. Загруженные пакеты не перезагружаются. Ваше окружение не будет спасено.Работает под Linux. Не знаю, что может случиться с другой ОС
источник
Мне нужна была такая же функциональность сеанса обновления в Windows, и я получил слегка измененную версию кода:
makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)
В Windows вам нужно изменить
Rprofile.site
файл. Он находится вetc
каталоге R. Также обратите внимание на последнюю часть пути, котораяbin/x64
может измениться в соответствии с конфигурацией вашей системы. Надеюсь, это поможет и другим.источник
В соответствии с идеей Мартина Моргана об использовании
.Last()
; это перезапускает R с тем же набором параметров командной строки, что и ранее:restart_r <- function(status = 0, debug = TRUE) { if (debug) message("restart_r(): Customizing .Last() to relaunch R ...") assign(".Last", function() { args <- commandArgs() system2(args[1], args = args[-1]) }, envir = globalenv()) if (debug) message("restart_r(): Quitting current R session and starting a new one ...") quit(save = "no", status = status, runLast = TRUE) }
источник
startup::restart()
в стартовый пакет какЯ думаю, что лучше всего использовать R, задав текущий рабочий каталог в параметрах. Затем всякий раз, когда ваше рабочее пространство / файл сеанса начинает показывать вас или в нем достаточно вашей работы (между проектами), вы можете просто переименовать этот файл сеанса по умолчанию в рабочем каталоге после закрытия R, и R / Rstudio автоматически запустит вас в новом файл рабочей области / сеанса, не мешая вашей текущей работе.
Не забудьте выйти из R и переименовать файл текущего сеанса
Конечно, если вы не хотите сохранять текущую работу, вам нужно убедиться, что вы сбросили объекты или операции с ними были выполнены после копирования из исходных объектов, чтобы они остались такими, как есть. Поверьте, знание того, что вы всегда можете загрузить старые рабочие места, - соблазн, но полезнее, чем нет.
Короче говоря, выход из R дает вам некоторый пробел, а выход означает, что это рабочее пространство заполнено, переименуйте его после завершения выхода и перезапустите R / Rstudio с новым рабочим пространством. Вы всегда можете загрузить выбранные объекты в новое рабочее пространство. В идеале вся важная работа должна быть в каталогах проектов, но вам все равно нужна история ваших заданий, чтобы время от времени возвращаться к ней, и сохраненные сеансы пригодятся в какой-то момент, когда вы будете работать над более длинными проектами. Если вам это не нужно, просто
rm(list=ls())
Также мне нравится
RDComClient
идея @Eduardo Alvin, но она больше не поддерживается.АЛЬТЕРНАТИВНЫЙ ВАРИАНТ
Простая альтернатива избавиться от багажа в любое время на рабочем месте - использовать
save.image
save.image("Rstreamingscience.data") quit(save='no') load("Rstreamingscience.data") ##G:/ADA registers## save.image("Rstreamingscience.data")
Это дает вам возможность приходить и уходить, когда вам угодно, и открывать столько рабочих мест, сколько вам нужно.
источник
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)
или с --save или --no-save
paste0(R.home(),"/bin/i386/R --no-save")
Я думаю, это то, что вам нужно, если вы использовали setwd () перед вызовом обновления (хотя ни эта, ни исходная версия у меня не работают, поскольку он перезапускает R, а затем закрывается, новое окно никогда не открывается. Если кто-то может прокомментировать это, пожалуйста, сделайте это)
источник
Я написал следующую функцию. Помнить! Вы можете использовать его только один раз, затем вам нужно будет перезагрузить его после перезапуска сеанса R.
clc <- function() { rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment gc() #grabage colector cat("\014") #clc .rs.restartR() #clear session }
Иногда также помогает отсоединение пакета.
источник