Anda bisa membersihkan ruang kerja Anda dengan rm(list=ls())tapi bukan itu yang Anda maksud kan?
Sacha Epskamp
2
Apakah Anda juga ingin melepaskan semua paket dan barang lain yang mungkin telah Anda lampirkan?
Spacedman
2
Mungkin satu saran adalah menambahkan saveparameter opsi baru ke q(), seperti "r", yang memulai ulang R tanpa menyimpan ruang kerja. Kemudian alias untuk q("r")dapat ditetapkan ke fungsi baru yang memulai ulang R.
Greg
Jawaban:
79
Jika Anda berada di RStudio: command / ctrl + shift + F10
Saya percaya membuka "sesi R bersih" mengharuskan 1-Data dari sesi saat ini dihapus; 2-Paket dari sesi saat ini dibongkar. .rs.restartR()tampaknya tidak melakukan salah satu dari hal ini di mesin saya ..
steadyfish
3
Saya menemukan .rs.restartR () berguna untuk kasus-kasus di mana R tidak akan membebaskan memori bahkan setelah menghapus (list = ls ()); gc () ;. Ini pasti membebaskan memori. Saya juga menyukai kenyataan bahwa itu tidak melepaskan paket.
Richard DiSalvo
57
Bergantung pada bagaimana Anda memulai R, coba tempatkan salah satu baris ini ke dalam .Rprofilefile Anda :
atau .Last <- function() system("R")bahkan nanti dalam siklus shutdown reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE). Kemudian q()terus kembali.
Martin Morgan
1
Pastikan R ada di PATH Anda.
G. Grothendieck
2
Solusi ini berfungsi tetapi tidak dapat direproduksi ketika skrip saya dijalankan oleh orang lain. Apakah ada perintah untuk dimasukkan dalam skrip R untuk memulai kembali sesi R? (alasannya adalah saya ingin semua paket dilepaskan)
Heisenberg
13
Saya menemukan bahwa .rs.restartR () bekerja mirip dengan menekan ctrl + shift + F10. tetapi dosis tidak membongkar paket
Berfungsi di RStudio - tetapi saya tidak yakin ada cara untuk membuatnya berfungsi di tempat lain. Dari getAnywhere(".rs.restartR")itu tampaknya masuk tools:rstudio. Saya belum beruntung mengaksesnya dalam sesi R murni.
Gregor Thomas
11
.rs.restartR()tidak membongkar paket, jadi tidak persis sama denganctrl+shift+f10
Arthur
7
Sebagai alternatif lain, Emacs ESS (> = 16.10) dapat memuat ulang proses R inferior inferior-ess-r-reload-hookyang terikat C-c C-e C-rsecara default.
Posting lama, tetapi tidak ada jawaban yang berfungsi (bagi saya, saya menggunakan Windows, belum menguji yang lain), jadi saya akan menambahkan solusi saya. Beberapa terminologi saya mungkin salah di sini, tetapi ini harus menjelaskan maksudnya:
Jawaban di atas tidak cukup berhasil
Sebagian besar jawaban yang dikirimkan di sini melibatkan penggunaan shellatau systemyang tidak cukup berfungsi karena saat mereka membuka konsol R baru dan menginstruksikan konsol asli untuk ditutup, konsol baru adalah proses yang berjalan dalam konteks aplikasi konsol lama. Itu berarti konsol asli tidak dapat ditutup hingga konsol baru ditutup. Beberapa pengguna di atas seperti hedgedandlevered melaporkan bahwa menutup konsol asli akan memaksa konsol baru untuk ditutup. Saat saya coba, konsol baru tidak terbuka, tetapi konsol lama tetap terbuka dalam keadaan beku sampai konsol baru ditutup.
Masalah dasarnya adalah memanggil shellatau systemtidak mengubah konteks aplikasi dari konsol asli ke yang baru, dan oleh karena itu proses asli tidak dapat dihentikan hingga konsol baru ditutup.
Alternatif yang cocok untuk saya
Sebagai gantinya gunakan shell.execyang biasanya digunakan untuk membuka file di aplikasi default berdasarkan jenis file. Ketika digunakan pada .exe, ternyata, itu menjalankan executable. Perbedaan penting, bagaimanapun, adalah bahwa sistem memulai aplikasi dalam konteksnya sendiri yang terpisah. Jadi, inilah kode yang berfungsi untuk saya:
Anda harus mengedit jalur file /bin/x64/Rgui.exeagar cocok dengan apa pun yang Anda gunakan untuk memulai R. Anda cukup meletakkan baris ini di .Rprofilefile Anda , lalu Anda dapat memanggilnya dengan memasukkan restart.Rkode R.
Kelemahan dari ini dibandingkan metode lain adalah Anda tidak dapat melewatkan argumen baris perintah seperti yang --no-saveAnda lakukan dengan just shell, tetapi setidaknya ini akan membiarkan Anda menutup proses R asli.
Setelah mencari solusi untuk ini, saya menyelesaikan masalah saya berdasarkan solusi ini di sini , menggunakan R Package RDCOMClient . Solusi di bawah ini hanya berfungsi dalam RStudio (Windows), setelah mensimulasikan penekanan tombol ctrl + shift + F10 .
Paket RDCOMClient harus diinstal dengan perintah di bawah ini:
Pada baris terakhir pada kode di atas, tombol 'ctrl' diwakili oleh '^' dan tombol shift dengan '+'. Semua penjelasan untuk representasi kunci ini tersedia di sini .
Setelah menjalankan baris terakhir kode di atas, seluruh sesi R di RStudio akan diatur ulang, menurut komentar @steadyfish . Artinya, ini menghapus semua data dari sesi saat ini dan membongkar semua paket yang dimuat di sesi tersebut.
Di windows, Anda perlu mengubah Rprofile.sitefile. Itu ada di bawah etcdirektori R. Juga hati-hati untuk bagian terakhir dari jalur yang bin/x64dapat berubah sesuai dengan konfigurasi sistem Anda. Saya harap ini akan membantu orang lain juga.
Sejalan dengan gagasan Martin Morgan tentang penggunaan .Last(); ini memulai ulang R dengan serangkaian opsi baris perintah yang sama seperti yang dipanggil sebelumnya:
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)
}
FYI, saya telah menambahkan startup::restart()ke paket startup sebagai cara
konvensi untuk
1
Saya pikir, seseorang menyadari penggunaan terbaik R dengan mengatur direktori kerja saat ini dalam opsi. Kemudian setiap kali file ruang kerja / sesi Anda mulai menampilkan Anda atau memiliki cukup pekerjaan Anda di dalamnya (di antara proyek), Anda dapat mengganti nama file sesi default ini di direktori kerja setelah menutup R dan R / Rstudio secara otomatis akan memulai Anda dengan yang baru. file ruang kerja / sesi, tanpa mengganggu pekerjaan Anda saat ini.
Ingatlah untuk keluar dari R dan mengganti nama file sesi saat ini
Tentu saja jika Anda tidak ingin menyimpan pekerjaan saat ini, Anda harus memastikan Anda mereset objek atau operasi pada mereka dilakukan setelah menyalin dari objek asli sehingga apa adanya. Percayalah, mengetahui Anda selalu dapat memuat ruang kerja lama adalah godaan, tetapi lebih berguna daripada tidak.
Singkatnya keluar dari R, ini memberi Anda beberapa celah saat berhenti berarti ruang kerja ini penuh, ganti namanya setelah menyelesaikan keluar dan mulai ulang R / Rstudio dengan ruang kerja baru. Anda selalu dapat memuat objek terpilih di ruang kerja baru. Idealnya semua pekerjaan penting harus ada di direktori Proyek tetapi Anda masih memerlukan riwayat pekerjaan Anda untuk kembali ke waktu tertentu dan sesi yang disimpan berguna di beberapa titik setelah Anda mengerjakan proyek yang lebih lama. Jika Anda tidak membutuhkannya sajarm(list=ls())
Juga, saya suka RDComClientide dari @Eduardo Alvin tetapi sudah dihentikan.
OPSI ALTERNATIF
Alternatif sederhana untuk membuang bagasi kapan saja di dalam ruang kerja Anda adalah dengan menggunakan save.image
Saya rasa inilah yang Anda perlukan jika Anda telah menggunakan setwd () sebelum memanggil segarkan (meskipun ini maupun versi aslinya tidak bekerja untuk saya, karena restart R kemudian menutup sendiri, jendela baru tidak pernah terbuka. Jika ada yang bisa mengomentari ini, tolong lakukan itu)
rm(list=ls())
tapi bukan itu yang Anda maksud kan?save
parameter opsi baru keq()
, seperti"r"
, yang memulai ulang R tanpa menyimpan ruang kerja. Kemudian alias untukq("r")
dapat ditetapkan ke fungsi baru yang memulai ulang R.Jawaban:
Jika Anda berada di RStudio: command / ctrl + shift + F10
Anda juga bisa menggunakan
sumber
.rs.restartR()
tampaknya tidak melakukan salah satu dari hal ini di mesin saya ..Bergantung pada bagaimana Anda memulai R, coba tempatkan salah satu baris ini ke dalam
.Rprofile
file Anda :makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv) makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
Kemudian masukkan ini ke konsol R:
akan menutup sesi saat ini dan memulai sesi baru.
sumber
.Last <- function() system("R")
bahkan nanti dalam siklus shutdownreg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. Kemudianq()
terus kembali.Saya menemukan bahwa .rs.restartR () bekerja mirip dengan menekan ctrl + shift + F10. tetapi dosis tidak membongkar paket
sumber
getAnywhere(".rs.restartR")
itu tampaknya masuktools:rstudio
. Saya belum beruntung mengaksesnya dalam sesi R murni..rs.restartR()
tidak membongkar paket, jadi tidak persis sama denganctrl+shift+f10
Sebagai alternatif lain, Emacs ESS (> = 16.10) dapat memuat ulang proses R inferior
inferior-ess-r-reload-hook
yang terikatC-c C-e C-r
secara default.sumber
Posting lama, tetapi tidak ada jawaban yang berfungsi (bagi saya, saya menggunakan Windows, belum menguji yang lain), jadi saya akan menambahkan solusi saya. Beberapa terminologi saya mungkin salah di sini, tetapi ini harus menjelaskan maksudnya:
Jawaban di atas tidak cukup berhasil
Sebagian besar jawaban yang dikirimkan di sini melibatkan penggunaan
shell
atausystem
yang tidak cukup berfungsi karena saat mereka membuka konsol R baru dan menginstruksikan konsol asli untuk ditutup, konsol baru adalah proses yang berjalan dalam konteks aplikasi konsol lama. Itu berarti konsol asli tidak dapat ditutup hingga konsol baru ditutup. Beberapa pengguna di atas seperti hedgedandlevered melaporkan bahwa menutup konsol asli akan memaksa konsol baru untuk ditutup. Saat saya coba, konsol baru tidak terbuka, tetapi konsol lama tetap terbuka dalam keadaan beku sampai konsol baru ditutup.Masalah dasarnya adalah memanggil
shell
atausystem
tidak mengubah konteks aplikasi dari konsol asli ke yang baru, dan oleh karena itu proses asli tidak dapat dihentikan hingga konsol baru ditutup.Alternatif yang cocok untuk saya
Sebagai gantinya gunakan
shell.exec
yang biasanya digunakan untuk membuka file di aplikasi default berdasarkan jenis file. Ketika digunakan pada .exe, ternyata, itu menjalankan executable. Perbedaan penting, bagaimanapun, adalah bahwa sistem memulai aplikasi dalam konteksnya sendiri yang terpisah. Jadi, inilah kode yang berfungsi untuk saya:makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)
Anda harus mengedit jalur file
/bin/x64/Rgui.exe
agar cocok dengan apa pun yang Anda gunakan untuk memulai R. Anda cukup meletakkan baris ini di.Rprofile
file Anda , lalu Anda dapat memanggilnya dengan memasukkanrestart.R
kode R.Kelemahan dari ini dibandingkan metode lain adalah Anda tidak dapat melewatkan argumen baris perintah seperti yang
--no-save
Anda lakukan dengan justshell
, tetapi setidaknya ini akan membiarkan Anda menutup proses R asli.sumber
Setelah mencari solusi untuk ini, saya menyelesaikan masalah saya berdasarkan solusi ini di sini , menggunakan R Package RDCOMClient .
Solusi di bawah ini hanya berfungsi dalam RStudio (Windows), setelah mensimulasikan penekanan tombol ctrl + shift + F10 .
Paket RDCOMClient harus diinstal dengan perintah di bawah ini:
install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")
Kode untuk mensimulasikan penekanan tombol dalam RStudio (Windows 10) adalah:
library(RDCOMClient) wsh <- COMCreate("Wscript.Shell") wsh$SendKeys("^+{F10}")
Pada baris terakhir pada kode di atas, tombol 'ctrl' diwakili oleh '^' dan tombol shift dengan '+'. Semua penjelasan untuk representasi kunci ini tersedia di sini .
Setelah menjalankan baris terakhir kode di atas, seluruh sesi R di RStudio akan diatur ulang, menurut komentar @steadyfish . Artinya, ini menghapus semua data dari sesi saat ini dan membongkar semua paket yang dimuat di sesi tersebut.
sumber
Tuliskan fungsi ini di profil .R Anda
r <- function() { assign('.Last', function() {system('R')}, envir = globalenv()) quit(save = 'no') }
r()
memulai kembali sesi R. Paket yang dimuat tidak akan dimuat ulang. Lingkungan Anda tidak akan disimpan.Bekerja untuk Linux. Tidak tahu apa yang mungkin terjadi di OS lain
sumber
Saya membutuhkan fungsionalitas sesi penyegaran yang sama di windows dan saya berakhir dengan versi kode yang sedikit dimodifikasi:
makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)
Di windows, Anda perlu mengubah
Rprofile.site
file. Itu ada di bawahetc
direktori R. Juga hati-hati untuk bagian terakhir dari jalur yangbin/x64
dapat berubah sesuai dengan konfigurasi sistem Anda. Saya harap ini akan membantu orang lain juga.sumber
Sejalan dengan gagasan Martin Morgan tentang penggunaan
.Last()
; ini memulai ulang R dengan serangkaian opsi baris perintah yang sama seperti yang dipanggil sebelumnya: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) }
sumber
startup::restart()
ke paket startup sebagai caraSaya pikir, seseorang menyadari penggunaan terbaik R dengan mengatur direktori kerja saat ini dalam opsi. Kemudian setiap kali file ruang kerja / sesi Anda mulai menampilkan Anda atau memiliki cukup pekerjaan Anda di dalamnya (di antara proyek), Anda dapat mengganti nama file sesi default ini di direktori kerja setelah menutup R dan R / Rstudio secara otomatis akan memulai Anda dengan yang baru. file ruang kerja / sesi, tanpa mengganggu pekerjaan Anda saat ini.
Ingatlah untuk keluar dari R dan mengganti nama file sesi saat ini
Tentu saja jika Anda tidak ingin menyimpan pekerjaan saat ini, Anda harus memastikan Anda mereset objek atau operasi pada mereka dilakukan setelah menyalin dari objek asli sehingga apa adanya. Percayalah, mengetahui Anda selalu dapat memuat ruang kerja lama adalah godaan, tetapi lebih berguna daripada tidak.
Singkatnya keluar dari R, ini memberi Anda beberapa celah saat berhenti berarti ruang kerja ini penuh, ganti namanya setelah menyelesaikan keluar dan mulai ulang R / Rstudio dengan ruang kerja baru. Anda selalu dapat memuat objek terpilih di ruang kerja baru. Idealnya semua pekerjaan penting harus ada di direktori Proyek tetapi Anda masih memerlukan riwayat pekerjaan Anda untuk kembali ke waktu tertentu dan sesi yang disimpan berguna di beberapa titik setelah Anda mengerjakan proyek yang lebih lama. Jika Anda tidak membutuhkannya saja
rm(list=ls())
Juga, saya suka
RDComClient
ide dari @Eduardo Alvin tetapi sudah dihentikan.OPSI ALTERNATIF
Alternatif sederhana untuk membuang bagasi kapan saja di dalam ruang kerja Anda adalah dengan menggunakan
save.image
save.image("Rstreamingscience.data") quit(save='no') load("Rstreamingscience.data") ##G:/ADA registers## save.image("Rstreamingscience.data")
Ini membuat Anda bebas untuk datang dan pergi sesuka Anda dan membuka ruang kerja sebanyak yang Anda butuhkan.
sumber
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)
atau dengan --save atau --no-save
paste0(R.home(),"/bin/i386/R --no-save")
Saya rasa inilah yang Anda perlukan jika Anda telah menggunakan setwd () sebelum memanggil segarkan (meskipun ini maupun versi aslinya tidak bekerja untuk saya, karena restart R kemudian menutup sendiri, jendela baru tidak pernah terbuka. Jika ada yang bisa mengomentari ini, tolong lakukan itu)
sumber
Saya telah menulis fungsi berikut. Ingat! Anda hanya dapat menggunakannya sekali, lalu Anda harus memuatnya kembali setelah sesi R dimulai ulang.
clc <- function() { rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment gc() #grabage colector cat("\014") #clc .rs.restartR() #clear session }
Terkadang melepaskan paket juga membantu.
sumber