R içinden temiz bir R oturumundan çıkın ve yeniden başlatın.


88

R içinde bir takma ad yapmanın bir yolu var mı? q() temiz bir R oturumunu yeniden başlatacak bir ?

Ve evet, yazmak için çok tembelim q()ve sonra mektubu R:)


Peki, çalışma alanınızı temizleyebilirsiniz, rm(list=ls())ancak demek istediğiniz bu değil mi?
Sacha Epskamp

2
Eklemiş olabileceğiniz herhangi bir paketi ve diğer şeyleri de çıkarmak istiyor musunuz?
Spacedman

2
Belki bir öneri , çalışma alanını kaydetmeden R'yi yeniden başlatan gibi yeni bir seçenek saveparametresi eklemek olabilir . Ardından, R'yi yeniden başlatan yeni bir işleve için bir takma ad atanabilir.q()"r"q("r")
Greg

Yanıtlar:


79

RStudio'daysanız: command / ctrl + shift + F10

Ayrıca kullanabilirsin

.rs.restartR()

12
"Temiz bir R oturumu" açmanın, mevcut oturumdaki 1-Verilerin kaldırılmasını gerektirdiğine inanıyorum; 2-Mevcut oturumdaki paketler kaldırılır. .rs.restartR()makinemde bunlardan hiçbirini yapmıyor gibi görünüyor ..
steadyfish

3
.Rs.restartR () 'yi, kaldırdıktan sonra bile R'nin belleği boşaltmayacağı durumlar için yararlı buluyorum (list = ls ()); gc () ;. Bu kesinlikle hafızayı serbest bırakır. Ayrıca paketleri ayırmamasını da seviyorum.
Richard DiSalvo

57

R'ye nasıl başladığınıza bağlı olarak, şu satırlardan birini .Rprofiledosyanıza yerleştirmeyi deneyin :

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

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

Ardından bunu R konsoluna girerek:

refresh

mevcut oturumu kapatacak ve yeni bir oturum başlatacak.


4
veya .Last <- function() system("R")hatta daha sonra kapatma döngüsünde reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE). Sonra q()geri gelmeye devam ediyor.
Martin Morgan

1
R'nin PATH'nizde olduğundan emin olun.
G. Grothendieck

2
Bu çözüm çalışıyor, ancak betiğim başkaları tarafından çalıştırıldığında yeniden üretilemez. R oturumunu yeniden başlatmak için R betiğine eklenecek bir komut var mı? (tüm paketlerin ayrılmasını istememin nedeni)
Heisenberg

13

.Rs.restartR () işlevinin ctrl + shift + F10 tuşlarına basmaya benzer şekilde çalıştığını gördüm. ama paketleri boşaltmayın


RStudio'da çalışıyor - ancak başka bir yerde çalışmasını sağlamanın bir yolu olduğundan emin değilim. Gönderen getAnywhere(".rs.restartR")göründüğü olmak tools:rstudio. Buna saf bir R seansında erişme şansım olmadı.
Gregor Thomas

11
.rs.restartR()paketleri boşaltmaz, bu nedenle tam olarak aynı değildirctrl+shift+f10
Arthur

7

Diğer bir alternatif olarak, Emacs ESS (> = 16.10), varsayılan inferior-ess-r-reload-hookolarak bağlı olduğu düşük R sürecini yeniden yükleyebilir C-c C-e C-r.


İşler! zekice!
ajan18

4

Eski gönderi, ancak cevapların hiçbiri işe yaramıyor (benim için Windows kullanıyorum, başkalarını test etmedim), bu yüzden çözümümü ekleyeceğim. Terminolojimden bazıları burada yanlış olabilir, ancak bu noktayı anlamalı:

Yukarıdaki cevaplar pek işe yaramıyor

Burada gönderilen yanıtların çoğu, yeni bir R konsolu açarken ve orijinal konsolu kapatması talimatını verirken, yeni konsol eski konsolun uygulama bağlamında çalışan bir işlem olduğundan , kullanmayı içerir shellveya systemtam olarak çalışmaz. Bu, orijinal konsolun yeni konsol kapanana kadar kapanamayacağı anlamına gelir. Hedgedandlevered gibi yukarıdaki kullanıcılardan bazıları, orijinal konsolu kapatmanın yeni konsolu kapanmaya zorladığını bildirdi. Denediğimde yeni konsol açılıyor ancak eski konsol, yeni konsol kapatılana kadar donmuş durumda açık kalıyor.

Temel sorun, uygulama bağlamını orijinal konsoldan yenisine çağırmak shellveya systemdeğiştirmemektir ve bu nedenle orijinal işlem, yeni konsol kapanana kadar sona eremez.

Benim için çalışan alternatif

Bunun yerine shell.exec, normalde dosya türüne bağlı olarak varsayılan uygulamada bir dosyayı açmak için kullanılacak olanı kullanın . Bir .exe'de kullanıldığında, görünüşe göre yürütülebilir dosyayı çalıştırır. Ancak önemli fark, sistemin uygulamayı kendi bağlamında başlatmasıdır. İşte benim için çalışan kod:

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

/bin/x64/Rgui.exeR'yi başlatmak için kullandığınızla eşleşecek şekilde dosya yolunu düzenlemeniz gerekir.Yalnızca bu satırı .Rprofiledosyanıza koyarsınız , sonra girerek çağırabilirsiniz.restart.RR'yi R kodunuzu .

Bunun diğer yöntemlere göre dezavantajı, komut satırı argümanlarını --no-savesadece yapacağınız gibi iletememenizdir shell, ancak en azından bu, orijinal R sürecini kapatmanıza izin verecektir.


4

Buna bir çözüm aradıktan sonra, sorunumu burada bu çözüme dayanarak , R Paketi RDCOMClient kullanarak çözdüm .
Aşağıdaki çözüm, ctrl + shift + F10 tuşlarına bastıktan sonra RStudio (Windows) içinde çalışır .

RDCOMClient paketi aşağıdaki komutla yüklenmelidir:

install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")

RStudio (Windows 10) içindeki tuş basışlarını simüle eden kod:

library(RDCOMClient) 
wsh <- COMCreate("Wscript.Shell") 
wsh$SendKeys("^+{F10}") 

Yukarıdaki kodun son satırında, 'ctrl' tuşu '^' ve shift tuşu '+' ile temsil edilmektedir. Bu temel temsiller için tüm açıklamalar burada mevcuttur .

Yukarıdaki kodun son satırını çalıştırdıktan hemen sonra, @steadyfish'in yorumuna göre RStudio'daki tüm R oturumu sıfırlanacaktır . Yani, mevcut oturumdaki tüm verileri kaldırır ve oturumdaki tüm yüklü paketleri kaldırır.


2

Bu işlevi .R profilinize yazın

r <- function() {
  assign('.Last',  function() {system('R')}, envir = globalenv())
  quit(save = 'no')
}

r()R oturumunu yeniden başlatır. Yüklenen paketler yeniden yüklenmeyecek. Çevreniz kurtarılmayacak.

Linux için çalışıyor. Diğer işletim sistemlerinde ne olabileceği hakkında hiçbir fikrim yok


1

Windows'ta aynı yenileme oturumu işlevine ihtiyacım vardı ve sonunda kodun biraz değiştirilmiş bir sürümüyle sonuçlandım:

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

Windows'ta Rprofile.sitedosyayı değiştirmeniz gerekir . R'nin etcdizini altındadır . Ayrıca bin/x64, sistem yapılandırmanıza göre değişebilen yolun son kısmına da dikkat edin . Umarım bu başkalarına da yardımcı olur.


1

Martin Morgan'ın kullanma fikri doğrultusunda .Last(); bu, R'yi daha önce çağrılanla aynı komut satırı seçenekleri kümesiyle yeniden başlatı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)
}

2
Bilginize, ben ekledim startup::restart()için başlangıç yeniden başlatma R. bir convenint yolu olarak paketin
HenrikB

1

Bence, seçeneklerde geçerli bir çalışma dizini ayarlayarak R'nin en iyi şekilde kullanılmasının farkına varılır. Daha sonra, çalışma alanı / oturum dosyanız sizi göstermeye başladığında veya içinde yeterince çalışmanız olduğunda (projeler arasında), R'yi kapattıktan sonra bu varsayılan oturum dosyasını çalışma dizininde yeniden adlandırabilirsiniz ve R / Rstudio sizi otomatik olarak yeni bir mevcut çalışmanızı bozmadan çalışma alanı / oturum dosyası.

R'den çıkmayı ve mevcut oturum dosyasını yeniden adlandırmayı unutmayın

Elbette mevcut çalışmayı kaydetmek istemiyorsanız, nesneleri sıfırladığınızdan emin olmalısınız veya bunlar üzerindeki işlemler, orijinal nesnelerden olduğu gibi kopyalandıktan sonra yapıldı. İnanın bana, eski çalışma alanlarını her zaman yükleyebileceğinizi bilmek caziptir, ancak olmamaktan daha yararlıdır.

Kısaca R'den çıkın, bu size biraz boşluk verirken, bu çalışma alanının dolu olduğu anlamına gelir, çıkış tamamlandıktan sonra yeniden adlandırın ve R / Rstudio'yu yeni bir çalışma alanıyla yeniden başlatın. Yeni çalışma alanında her zaman seçilen nesneleri yükleyebilirsiniz. İdeal olarak, tüm önemli işler Proje dizinlerinde olmalıdır, ancak yine de zaman zaman geri dönmek için işlerinizin geçmişine ihtiyacınız vardır ve kaydedilen oturumlar, daha uzun projelerde olduğunuzda bir noktada yararlı olur. Eğer hiçbirine ihtiyacın yoksa sadecerm(list=ls())

Ayrıca RDComClient@Eduardo Alvin'in fikrini beğendim ama artık sona erdi.

ALTERNATİF SEÇENEK

Çalışma alanınızda istediğiniz zaman bagajdan kurtulmanın basit bir alternatifi kullanmaktır. save.image

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

Bu, dilediğiniz gibi gelip gitme ve ihtiyaç duyduğunuz kadar çalışma alanı açma özgürlüğü sağlar .


0
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)

veya --save veya --no-save ile

paste0(R.home(),"/bin/i386/R --no-save")

Yenilemeyi çağırmadan önce setwd () kullandıysanız ihtiyacınız olan şeyin bu olduğunu düşünüyorum (ne bu ne de orijinal sürüm benim için çalışmıyor, çünkü R'yi yeniden başlatıp sonra kendi kendini kapatıyor, yeni bir pencere asla açılmıyor. bunu lütfen yap)


Bunu denediğinizde yeni bir pencere açılır, ancak yeni pencere kapanana kadar eski pencere donmuş halde açık tutulur
Matthew

0

Aşağıdaki işlevi yazdım. Hatırlamak! Yalnızca bir kez kullanabilirsiniz, ardından R oturumu yeniden başladıktan sonra yeniden yüklemeniz gerekir.

clc <- function() {
  rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment
  gc()  #grabage colector
  cat("\014") #clc
  .rs.restartR() #clear session
}

Bazen bir paketi çıkarmak da yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.