Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

.rs.restartR()

Ответ 2

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

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

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

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

refresh

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

Ответ 3

Я обнаружил, что .rs.restartR() работает аналогично нажатию Ctrl + Shift + F10. но доза не разгружать пакеты

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

Я думаю, лучше всего реализовать R, установив текущий рабочий каталог в настройках. Тогда всякий раз, когда ваш файл рабочего пространства/сеанса начинает показывать вас или в нем достаточно вашей работы (между проектами), вы можете просто переименовать этот файл сеанса по умолчанию в рабочем каталоге после закрытия R, и R/Rstudio автоматически запустит вас в новом файл рабочей области/сессии, не мешая вашей текущей работе.

Не забудьте выйти из R и переименовать текущий файл сеанса

Конечно, если вы не хотите сохранять текущую работу, вы должны убедиться, что вы сбросили объекты или операции над ними были выполнены после копирования из исходных объектов, чтобы они были такими, как есть. Поверьте мне, зная, что вы всегда можете загрузить старые рабочие пространства, это искушение, но оно более полезно, чем нет.

Короче говоря, выход из R дает некоторый пробел, а выход означает, что это рабочее пространство заполнено, переименуйте его после завершения выхода и перезапустите R/Rstudio с новым рабочим пространством. Вы всегда можете загрузить выбранные объекты в новом рабочем пространстве. В идеале вся важная работа должна быть в каталогах проекта, но вам все еще нужна история ваших заданий, чтобы вернуться к ней время от времени, а сохраненные сеансы пригодятся в какой-то момент, когда вы будете работать над более длинными проектами. Если вам ничего не нужно, просто rm(list=ls())

Кроме того, мне нравится RDComClient идея, @Eduardo Элвин, но оно было прекращено.

АЛЬТЕРНАТИВНЫЙ ВАРИАНТ

Простая альтернатива, чтобы избавиться от багажа в любое время в вашем рабочем пространстве, это использовать save.image

save.image("Rstreamingscience.data")
quit(save='no')
load("Rstreamingscience.data") ##G:/ADA registers##
save.image("Rstreamingscience.data")

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

Иногда отключение пакета также помогает.

Ответ 11

В соответствии с идеей Мартина Моргана использовать .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)
}