আর এর মধ্যে থেকেই ক্লিন আর সেশনটি প্রস্থান করুন এবং পুনরায় চালু করবেন?


88

আর-এর মধ্যে কোনও উপকরণ তৈরি করার কোন উপায় আছে যা কার্যকর করে q()এবং একটি পরিষ্কার আর সেশন পুনরায় আরম্ভ করবে ?

এবং হ্যাঁ, আমি q()চিঠিটি টাইপ করতে খুব অলস এবং R:)


আচ্ছা আপনি নিজের ওয়ার্কস্পেস দিয়ে সাফ করতে পারেন rm(list=ls())তবে ঠিক যা বোঝায় তা নয়?
সাচা এপসক্যাম্প

4
আপনি কি সংযুক্ত কোনও প্যাকেজ এবং অন্যান্য জিনিসগুলিও আলাদা করতে চান?
স্পেসডম্যান

4
সম্ভবত একটি পরামর্শ হ'ল একটি নতুন বিকল্প saveপ্যারামিটার যুক্ত করা q(), যেমন "r", ওয়ার্কস্পেসটি সংরক্ষণ না করে আর পুনরায় আরম্ভ করে। তারপরে একটি উপাধি q("r")একটি নতুন ফাংশনে বরাদ্দ করা যেতে পারে যা আর।
গ্রেগ

উত্তর:


79

আপনি যদি আর স্টুডিওতে রয়েছেন: কমান্ড / সিটিআরএল + শিফট + এফ 10

আপনি ব্যবহার করতে পারেন

.rs.restartR()

12
আমি বিশ্বাস করি একটি "ক্লিন আর সেশন" খোলার জন্য বর্তমান সেশন থেকে 1-ডেটা সরানো প্রয়োজন; বর্তমান সেশন থেকে 2-প্যাকেজগুলি লোড করা আছে। .rs.restartR()আমার মেশিনে এই জিনিসগুলির
কোনও একটিও

4
আমি .rs.restartR () কে কেসগুলি ক্ষেত্রে দরকারী মনে করি যেখানে অপসারণের পরেও (তালিকা = ls ()) মেমরি মুক্ত করে না; জিসি ();। এটি অবশ্যই স্মৃতি মুক্ত করে। আমি এটি প্যাকেজগুলি বিচ্ছিন্ন করে না তাও পছন্দ করি।
রিচার্ড ডিসালভো

57

আপনি কীভাবে আর শুরু করবেন তার উপর নির্ভর করে আপনার .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()ফিরে আসতে থাকে।
মার্টিন মরগান

4
আপনার পাথের উপর নিশ্চিত হন আর।
জি গ্রোথেনডিক

4
এই সমাধানটি কাজ করে তবে পুনরুত্পাদনযোগ্য হয় না যখন আমার স্ক্রিপ্ট অন্যদের দ্বারা চালিত হয়। আর সেশন পুনরায় আরম্ভ করার জন্য আর স্ক্রিপ্টে অন্তর্ভুক্ত করার জন্য কোন আদেশ আছে? (কারণটি আমি চাই সমস্ত প্যাকেজ আলাদা করা হোক)
হাইজেনবার্গ

13

আমি খুঁজে পেয়েছি যে .rs.restartR () ctrl + shift + F10 টিপানোর মতো কাজ করে to তবে ডোজ প্যাকেজগুলি আনলোড করে না


আরস্টুডিওতে কাজ করে - তবে আমি নিশ্চিত নই যে এটি অন্য কোথাও কাজ করার উপায় আছে। getAnywhere(".rs.restartR")এটি থেকে প্রদর্শিত হয় tools:rstudio। খাঁটি আর সেশনে আমার যে কোনও ভাগ্য অ্যাক্সেস হয়নি।
গ্রেগর থমাস

11
.rs.restartR()প্যাকেজগুলি আনলোড করে না, তাই এটি ঠিক যেমনটি হয় নাctrl+shift+f10
আর্থার

7

অন্য বিকল্প হিসাবে, ইমাস্যাক্স ইএসএস (> = 16.10) নিকৃষ্ট আর প্রক্রিয়াটি ডিফল্টরূপে inferior-ess-r-reload-hookআবদ্ধ যার মাধ্যমে পুনরায় লোড করতে পারে C-c C-e C-r


কাজ! জমকালোভাবে!
এজেন্ট

4

পুরানো পোস্ট, তবে উত্তরগুলির কোনওটিই বেশ কার্যকর নয় (আমার জন্য, আমি উইন্ডোজ ব্যবহার করছি, অন্যকে পরীক্ষা করিনি), তাই আমি আমার সমাধানটি যুক্ত করব। আমার কিছু পরিভাষা এখানে বন্ধ রয়েছে, তবে এটি পয়েন্টটি পাওয়া উচিত:

উপরের উত্তরগুলি যথেষ্ট কাজ করে না

এখানে জমা দেওয়া বেশিরভাগ উত্তরগুলি ব্যবহার করে shellবা systemযা কার্যকরভাবে কার্যকর হয় না কারণ তারা একটি নতুন আর কনসোল খোলার সময় এবং মূল কনসোলটি বন্ধ করার নির্দেশ দেয়, নতুন কনসোলটি পুরানো কনসোলের অ্যাপ্লিকেশন প্রসঙ্গে চলমান একটি প্রক্রিয়া। তার মানে নতুন কনসোলটি বন্ধ না হওয়া পর্যন্ত আসল কনসোলটি বন্ধ হতে পারে না। উপরের কিছু ব্যবহারকারী যেমন হেজেডএন্ডলেভার্ড জানিয়েছেন যে মূল কনসোলটি বন্ধ করে নতুন কনসোলটি বন্ধ করতে বাধ্য করে। আমি যখন চেষ্টা করি তখন নতুন কনসোলটি খোলে, তবে নতুন কনসোলটি বন্ধ না হওয়া পর্যন্ত পুরানো কনসোলটি হিমশীতল অবস্থায় খোলা থাকে।

মূল সমস্যাটি কল করা shellবা systemমূল কনসোল থেকে নতুনটিতে অ্যাপ্লিকেশন প্রসঙ্গটি পরিবর্তন করে না এবং নতুন কনসোলটি বন্ধ না হওয়া পর্যন্ত মূল প্রক্রিয়াটি শেষ হতে পারে না।

বিকল্প যে আমার জন্য কাজ করে

পরিবর্তে shell.execসাধারণত ফাইল ধরণের উপর ভিত্তি করে ডিফল্ট অ্যাপ্লিকেশনটিতে একটি ফাইল খোলার জন্য ব্যবহৃত হবে তা ব্যবহার করুন। যখন .exe এ ব্যবহার করা হয়, দৃশ্যত, এটি এক্সিকিউটেবল চালায় runs তবে গুরুত্বপূর্ণ পার্থক্যটি হ'ল সিস্টেমটি তার নিজস্ব পৃথক প্রসঙ্গে অ্যাপ্লিকেশন শুরু করে। সুতরাং এখানে কোডটি আমার পক্ষে কাজ করে:

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

/bin/x64/Rgui.exeআর শুরু করতে আপনি যা ব্যবহার করেন তা মেলানোর জন্য আপনাকে ফাইলের পাথ সম্পাদনা করতে হবে You আপনি কেবল এই লাইনটি আপনার .Rprofileফাইলে রেখেছেন , তারপরে আপনি restart.Rআপনার আর কোড প্রবেশ করে কল করতে পারবেন ।

অন্যান্য পদ্ধতির তুলনায় এর নেতিবাচকতাটি হ'ল আপনি যেমন কমান্ড লাইন আর্গুমেন্টগুলি ঠিক --no-saveমতো করতে পারছেন না shellতবে কমপক্ষে এটি আপনাকে মূল আর প্রক্রিয়াটি বন্ধ করে দেবে।


4

এর সমাধান অনুসন্ধান করার পরে, আমি এখানে এই সমাধানের উপর ভিত্তি করে আমার সমস্যাটি সমাধান করেছি , আর প্যাকেজ আরডিসিএমসিলেট ব্যবহার করে ।
সমাধান বেলো কেবল আরস্টুডিও (উইন্ডোজ) এর মধ্যে কাজ করে, এটি একবার কী-স্ট্রেসগুলি সিআরটিএল + শিফট + এফ 10 অনুকরণ করে

RDCOMClient প্যাকেজটি অবশ্যই কমান্ড বেলো সহ ইনস্টল করা উচিত:

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

আরস্টুডিও (উইন্ডোজ 10) এর মধ্যে কী-টিপসগুলি অনুকরণ করার কোডটি হ'ল:

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

উপরের কোডের শেষ লাইনে, 'ctrl' কীটি '' 'দ্বারা এবং শিফট কী' + 'দ্বারা উপস্থাপন করা হয়। এই কী উপস্থাপনের জন্য সমস্ত ব্যাখ্যা এখানে উপলব্ধ

ঠিক উপরের কোডের শেষ লাইনটি চালানোর পরে, @ স্টাডিফিশের মন্তব্য অনুসারে আরস্টুডিওতে পুরো আর সেশনটি পুনরায় সেট করা হবে । এটি বর্তমান সেশন থেকে সমস্ত ডেটা সরিয়ে দেয় এবং সেশনে সমস্ত লোড হওয়া প্যাকেজগুলি আনলোড করে।


2

আপনার .R প্রোফাইলে এই ফাংশনটি লিখুন

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

r()আপনাকে আর সেশন পুনরায় আরম্ভ করবে। লোড হওয়া প্যাকেজগুলি পুনরায় লোড হবে না। আপনার পরিবেশ সংরক্ষণ করা হবে না।

লিনাক্সের জন্য কাজ করে। অন্যান্য ওএসে কী ঘটতে পারে তার কোনও ধারণা নেই


1

আমার উইন্ডোতে একই রিফ্রেশ সেশন কার্যকারিতা প্রয়োজন এবং আমি কোডটির কিছুটা পরিবর্তিত সংস্করণ দিয়ে শেষ করেছি:

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

উইন্ডোগুলিতে আপনার Rprofile.siteফাইলটি পরিবর্তন করতে হবে। এটি আর এর etcডিরেক্টরিতে রয়েছে। bin/x64আপনার সিস্টেমে কনফিগারেশন অনুযায়ী যে পথটি পরিবর্তন করতে পারে তার শেষ অংশটিও দেখুন। আমি আশা করি এটি অন্যকেও সহায়তা করবে।


1

মার্টিন মরগ্যান ব্যবহারের ধারণার সাথে সঙ্গতিপূর্ণ .Last(); এটি আর কমান্ড-লাইন বিকল্পগুলির আগের সেট হিসাবে একই সেটটি পুনরায় আরম্ভ করে:

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)
}

4
এফওয়াইআই, আমি startup::restart()আর স্টার্টআপ প্যাকেজে যুক্ত করেছি পুনরায় আরম্ভ করার এক
নিয়মিত

1

আমি মনে করি, বিকল্পগুলির মধ্যে একটি বর্তমান ওয়ার্কিং ডিরেক্টরি সেট করে আর এর সেরা ব্যবহারটি উপলব্ধি করে। তারপরে যখনই আপনার ওয়ার্কস্পেস / সেশন ফাইলটি আপনাকে দেখাতে শুরু করে বা এতে আপনার কাজের যথেষ্ট পরিমাণ থাকে (প্রকল্পগুলির মধ্যে) আপনি কেবল এই ডিরেক্টরিটি ডিফল্ট অধিবেশন ফাইলটির নাম পুনরায় নামকরণের পরে আর এবং আর / আরস্তুদিও আপনাকে স্বয়ংক্রিয়ভাবে নতুন করে শুরু করতে পারবেন আপনার বর্তমান কাজকে বিরক্ত না করে ওয়ার্কস্পেস / সেশন ফাইল।

আর ছেড়ে দিতে এবং বর্তমান সেশন ফাইলটির নতুন নামকরণ মনে রাখবেন

অবশ্যই আপনি যদি বর্তমানের কাজটি সংরক্ষণ করতে না চান তবে আপনাকে নিশ্চিত করতে হবে যে আপনি বস্তুগুলি পুনরায় সেট করতে বা সেগুলি অপারেশনগুলি আসল বস্তুগুলি থেকে অনুলিপি করার পরে সম্পন্ন হয়েছে যাতে তারা যেমন রয়েছে তেমন। আমাকে বিশ্বাস করুন, আপনি সবসময় পুরানো ওয়ার্কস্পেসগুলি লোড করতে পারবেন তা জেনে রাখা একটি প্রলোভন তবে এর চেয়ে বেশি কার্যকর।

সংক্ষিপ্ত প্রস্থান আর এ, প্রস্থান করার সময় এটি আপনাকে কিছুটা ফাঁক দেয় মানে এই কর্মক্ষেত্রটি পূর্ণ, প্রস্থান সমাপ্তির পরে পুনরায় নামকরণ করুন এবং আর / রস্তুদিওকে একটি নতুন ওয়ার্কস্পেস দিয়ে পুনরায় চালু করুন। আপনি নতুন ওয়ার্কস্পেসে সর্বদা নির্বাচিত বস্তু লোড করতে পারেন। আদর্শভাবে সমস্ত গুরুত্বপূর্ণ কাজ প্রকল্প ডিরেক্টরিতে হওয়া উচিত তবে আপনার সময়সীমায় আবার ফিরে যেতে আপনার কাজের ইতিহাস প্রয়োজন এবং আপনি যখন দীর্ঘ প্রকল্পে চলে আসেন তখন সেভ সেশনগুলি কোনও কোনও সময়ে কার্যকর হয়। আপনার যদি এটির কোনও প্রয়োজন না হয়rm(list=ls())

এছাড়াও, আমি RDComClientএডুয়ার্ডো আলভিনের ধারণাটি পছন্দ করি তবে এটি বন্ধ হয়ে গেছে।

বিকল্প বিকল্প

আপনার কর্মক্ষেত্রের অভ্যন্তরে যে কোনও সময় লাগেজ থেকে মুক্তি পাওয়ার জন্য একটি সহজ বিকল্প হ'ল 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)

বা - সেভ বা - না-সংরক্ষণ করুন

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

আমি মনে করি রিফ্রেশ করার আগে আপনি setwd () ব্যবহার করেছেন তবে এটিই আপনার প্রয়োজন ( এটি, দয়া করে এটি করুন)


আমি এটি চেষ্টা করার পরে, একটি নতুন উইন্ডো খোলা হবে, তবে নতুন উইন্ডোটি বন্ধ না হওয়া অবধি পুরানো উইন্ডোটি হিমায়িত অবস্থায় খোলা রাখা হবে
ম্যাথু

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
}

কখনও কখনও একটি প্যাকেজ বিচ্ছিন্ন করা সাহায্য করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.