Выйдите и перезапустите чистый сеанс R изнутри R?

r alias

51962 просмотра

11 ответа

Есть ли способ сделать псевдоним внутри R, который будет выполняться q()и перезапустить чистый сеанс R?

И да, мне лень набирать q()а потом письмо R:)

Автор: justin Источник Размещён: 17.05.2019 02:50

Ответы (11)


57 плюса

Если вы находитесь в RStudio: command / ctrl + shift + F10

Вы также можете использовать

.rs.restartR()
Автор: mgoldwasser Размещён: 19.09.2014 01:12

50 плюса

В зависимости от того, как вы запускаете R, попробуйте поместить одну из этих строк в ваш .Rprofileфайл:

makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)

makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)

Затем введите это в консоли R:

refresh

закроет текущий сеанс и запустит новый.

Автор: G. Grothendieck Размещён: 11.06.2011 12:14

7 плюса

Я обнаружил, что .rs.restartR () работает так же, как нажатие Ctrl + Shift + F10.

Автор: Adam Lee Perelman Размещён: 13.10.2015 12:11

4 плюса

Старый пост, но ни один из ответов не работает (для меня, я использую 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как это было бы с just shell, но, по крайней мере, это позволит вам закрыть исходный процесс R.

Автор: Matthew Размещён: 27.07.2017 02:18

4 плюса

После того, как в поисках решения этого, я решил мою проблему на основе этого решения здесь , используя R пакет 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 будет сброшен . То есть он удаляет все данные из текущего сеанса и выгружает все загруженные пакеты в сеансе.

Автор: Eduardo Alvim Размещён: 01.06.2018 01:26

1 плюс

Мне понадобилась та же функциональность сеанса обновления в Windows, и я получил слегка измененную версию кода:

makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)

На окнах вам нужно изменить Rprofile.siteфайл. Это в etcкаталоге R. Также следите за последней частью пути, который bin/x64может измениться в зависимости от конфигурации вашей системы. Я надеюсь, что это поможет и другим.

Автор: mron Размещён: 10.04.2015 02:31

1 плюс

Я думаю, лучше всего реализовать 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")

Это позволяет вам приходить и уходить когда угодно и открывать столько рабочих мест, сколько вам нужно.

Автор: Suntropical Размещён: 05.09.2018 03:15

0 плюса

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 () перед вызовом refresh (хотя ни эта, ни исходная версия не работают для меня, так как он перезапускает R, затем закрывает себя, новое окно никогда не открывается. Если кто-то может комментировать это, пожалуйста, сделайте так)

Автор: hedgedandlevered Размещён: 11.04.2014 03:34

0 плюса

Я написал следующую функцию. Помните! Вы можете использовать его только один раз, затем вам нужно перезагрузить его после перезапуска сеанса 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
}

Иногда отсоединение пакета также помогает.

Автор: Adam Lee Perelman Размещён: 16.11.2015 03:19

0 плюса

В соответствии с идеей Мартина Моргана об использовании .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)
}
Автор: HenrikB Размещён: 04.05.2017 08:52

0 плюса

В качестве другой альтернативы, Emacs ESS (> = 16.10) может перезагрузить подчиненный процесс R, с inferior-ess-r-reload-hookкоторым связан C-c C-e C-rпо умолчанию.

Автор: pavel Размещён: 07.03.2019 04:06
Вопросы из категории :
32x32