R के भीतर से स्वच्छ R सत्र को छोड़ें और पुनः आरंभ करें?


88

क्या कोई ऐसा तरीका है जिससे मैं R के भीतर एक उपनाम बना सकता हूं, जो निष्पादित करेगा q()और फिर स्वच्छ R सत्र को फिर से शुरू करेगा ?

और हाँ, मैं टाइप करने के लिए बहुत आलसी हूँ q()और फिर पत्र R:)


ठीक है, लेकिन आप अपने कार्यक्षेत्र को साफ कर सकते हैं rm(list=ls())लेकिन ऐसा नहीं है कि आपका क्या मतलब है?
सच्चा ईप्सकैंप 11:11

2
क्या आप किसी भी पैकेज और अन्य चीजों को अलग करना चाहते हैं जो आपने संलग्न किया हो?
स्पैनमैन

2
शायद एक सुझाव के लिए एक नया विकल्प saveपैरामीटर जोड़ना होगा q(), जैसे कि "r", कार्यक्षेत्र को बचाने के बिना आर को पुनरारंभ करता है। तब के लिए एक उपनाम q("r")को एक नए फ़ंक्शन को सौंपा जा सकता है जो आर। को पुनः आरंभ करता है
ग्रेग

जवाबों:


78

यदि आप RStudio में हैं: कमांड / ctrl + shift + F10

आप भी उपयोग कर सकते हैं

.rs.restartR()

12
मेरा मानना ​​है कि "स्वच्छ आर सत्र" खोलने के लिए आवश्यक है कि वर्तमान सत्र से 1-डेटा हटा दिया जाए; 2-वर्तमान सत्र से संकुल अनलोड हैं। .rs.restartR()मेरी मशीन पर इन चीजों को करने के लिए प्रतीत नहीं होता है ..
स्टेफिश

3
मुझे .rs.restartR () उन मामलों के लिए उपयोगी है जहाँ R, रिमूव (सूची = ls ()) के बाद भी मेमोरी को मुक्त नहीं करेगा; जी सी () ;. यह निश्चित रूप से स्मृति को मुक्त करता है। मैं इस तथ्य को भी पसंद करता हूं कि यह पैकेजों को अलग नहीं करता है।
रिचर्ड DiSalvo

56

आर शुरू करने के आधार पर आप इनमें से एक लाइन को अपनी .Rprofileफ़ाइल में रखने का प्रयास करते हैं:

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

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

फिर इसे आर कंसोल में दर्ज करें:

refresh

वर्तमान सत्र को बंद कर देगा और एक नई शुरुआत करेगा।


4
या .Last <- function() system("R")बाद में भी बंद चक्र में reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)। फिर q()वापस आता रहता है।
मार्टिन मॉर्गन

1
सुनिश्चित करें कि R आपके PATH पर है।
जी। ग्रोथेंडिक

2
जब मेरी स्क्रिप्ट दूसरों द्वारा चलाई जाती है तो यह समाधान काम करता है लेकिन प्रतिलिपि प्रस्तुत करने योग्य नहीं है। क्या R सत्र को पुनः आरंभ करने के लिए R स्क्रिप्ट में शामिल होने की आज्ञा है? (इसका कारण यह है कि मैं चाहता हूं कि सभी पैकेजों को अलग कर दिया जाए)
हाइजेनबर्ग

13

मैंने पाया कि .rs.restartR () ctrl + shift + F10 दबाने के समान काम करता है। लेकिन खुराक पैकेज को अनलोड नहीं करते हैं


RStudio में काम करता है - लेकिन मुझे यकीन नहीं है कि यह कहीं और काम करने का एक तरीका है। से getAnywhere(".rs.restartR")प्रतीत होता है tools:rstudio। मेरे पास शुद्ध आर सत्र में पहुंचने का कोई सौभाग्य नहीं है।
ग्रेगर थॉमस

11
.rs.restartR()पैकेजों को लोड नहीं करता है, इसलिए यह बिल्कुल वैसा ही नहीं हैctrl+shift+f10
आर्थर

5

एक अन्य विकल्प के रूप में, एमएसीएस ईएसएस (> = 16.10) अवर आर प्रक्रिया को फिर से लोड कर सकता है inferior-ess-r-reload-hookजिसके माध्यम C-c C-e C-rसे डिफ़ॉल्ट रूप से बाध्य है ।


काम करता है! शानदार ढंग से!
एजेंट

4

पुरानी पोस्ट, लेकिन जवाबों में से कोई भी काफी काम नहीं करता है (मेरे लिए, मैं विंडोज का उपयोग कर रहा हूं, दूसरों का परीक्षण नहीं किया है), इसलिए मैं अपना समाधान जोड़ूंगा। मेरी कुछ शब्दावली यहां बंद हो सकती है, लेकिन इस बिंदु को पार करना चाहिए:

उपरोक्त उत्तर काफी काम नहीं करते

यहां प्रस्तुत अधिकांश उत्तरों में शामिल हैं shellया systemजो काफी काम नहीं करते हैं क्योंकि वे एक नया आर कंसोल खोलते हैं और मूल कंसोल को बंद करने का निर्देश देते हैं, नया कंसोल पुराने कंसोल के एप्लिकेशन संदर्भ में चलने वाली एक प्रक्रिया है। इसका मतलब है कि नया कंसोल बंद होने तक मूल कंसोल बंद नहीं हो सकता। ऊपर के कुछ उपयोगकर्ताओं जैसे कि हेजेंडेंडलेवर ने बताया कि मूल कंसोल को बंद करने से नया कंसोल बंद होने के लिए बाध्य होता है। जब मैं कोशिश करता हूं, तो नया कंसोल खुलता है, लेकिन नया कंसोल बंद होने तक पुराना कंसोल स्थिर अवस्था में खुला रहता है।

मूल समस्या कॉल 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आर शुरू करने के लिए जो भी आप उपयोग करते हैं, उससे मेल करने के लिए आपको फ़ाइल पथ को संपादित करना होगा। आपने इस लाइन को अपनी .Rprofileफ़ाइल में डाल दिया है , फिर आप इसे restart.Rअपने आर कोड में दर्ज करके कॉल कर सकते हैं ।

अन्य तरीकों पर इस बात का नकारात्मक पक्ष यह है कि आप कमांड लाइन के तर्कों को पास नहीं कर सकते हैं जैसे --no-saveकि आप बस करेंगे shell, लेकिन कम से कम यह आपको मूल आर प्रक्रिया को बंद करने देगा।


4

इस के लिए एक समाधान के लिए देखने के बाद, मैं इस समाधान के आधार पर मेरी समस्या हल यहाँ , आर पैकेज का उपयोग कर RDCOMClient
समाधान bellow सिर्फ RStudio (विंडोज) के भीतर काम करता है, एक बार जब यह keypresses ctrl + shift + F10 का अनुकरण करता है

RDCOMClient पैकेज को कमांड बॉक्स के साथ स्थापित किया जाना चाहिए:

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

RStudio (विंडोज 10) के भीतर कुंजीपटों को अनुकरण करने के लिए कोड हैं:

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

ऊपर दिए गए कोड में अंतिम पंक्ति में, 'ctrl' कुंजी को '^' द्वारा और शिफ्ट कुंजी को '+' द्वारा दर्शाया गया है। इस प्रमुख अभ्यावेदन के लिए सभी स्पष्टीकरण यहां उपलब्ध हैं

ऊपर दिए गए कोड की अंतिम पंक्ति को चलाने के बाद, @steadyfish की टिप्पणी के अनुसार, RStudio में पूरा R सत्र रीसेट हो जाएगा । यही है, यह वर्तमान सत्र से सभी डेटा को निकालता है और सत्र में सभी लोड किए गए पैकेज को अनलोड करता है।


2

इस फ़ंक्शन को अपने .Rprofile में लिखें

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

r()आप आर सत्र को पुनरारंभ करता है। लोड किए गए पैकेज पुनः लोड नहीं होंगे। आपके पर्यावरण को बचाया नहीं जाएगा।

लिनक्स के लिए काम करता है। अन्य OS पर क्या हो सकता है इसका कोई अंदाजा नहीं है


1

मुझे खिड़कियों पर समान ताज़ा सत्र कार्यक्षमता की आवश्यकता थी और मैं कोड के थोड़ा संशोधित संस्करण के साथ समाप्त हुआ:

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

खिड़कियों पर आपको संशोधित करने की आवश्यकता है Rprofile.site फ़ाइल । यह R की etcडायरेक्टरी के अंतर्गत है । पथ के अंतिम भाग bin/x64को अपने सिस्टम कॉन्फ़िगरेशन के अनुसार बदल सकते हैं। मुझे उम्मीद है कि इससे दूसरों को भी मदद मिलेगी।


1

मार्टिन मॉर्गन के उपयोग के विचार के अनुरूप .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)
}

2
FYI करें, मैंने स्टार्टअप पैकेज को पुनः आरंभ करने के एक संयोजक तरीके के रूप में जोड़ा startup::restart()है ।
हेनरिक

1

मुझे लगता है, एक विकल्प में एक वर्तमान काम कर निर्देशिका की स्थापना के द्वारा आर का सबसे अच्छा उपयोग का एहसास है। फिर जब भी आपका कार्यक्षेत्र / सत्र फ़ाइल आपको दिखाना शुरू कर देती है या उसमें आपका काफी काम होता है (परियोजनाओं के बीच में) तो आप 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")

यह आपको कृपया आने और जाने के लिए स्वतंत्र छोड़ देता है और जितनी आवश्यकता हो उतने कार्यस्थान खोलें


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

या के साथ - save या - नहीं-सहेजें

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

मुझे लगता है कि आपको रिफ्रेश कॉल करने से पहले यदि आपने सेटवेड () का उपयोग किया है, तो इसकी आवश्यकता है (हालांकि न तो यह और न ही मूल संस्करण मेरे लिए काम करता है, क्योंकि यह आर को पुनरारंभ करता है फिर खुद को बंद कर देता है, एक नई विंडो कभी नहीं खुलती है। यदि कोई भी टिप्पणी कर सकता है। यह, कृपया ऐसा करें)


जब मैं यह कोशिश करता हूं, तो एक नई खिड़की खोली जाती है, लेकिन पुरानी खिड़की को एक जमे हुए राज्य में खुला रखा जाता है जब तक कि नई खिड़की बंद न हो जाए
मत्ती

0

मैंने निम्नलिखित फ़ंक्शन लिखा है। याद है! आप इसे केवल एक बार उपयोग कर सकते हैं, फिर आर सत्र के पुनरारंभ होने के बाद आपको इसे फिर से लोड करना होगा।

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

कभी-कभी किसी पैकेज को अलग करने से भी मदद मिलती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.