Apakah ada cara saya dapat membuat alias, dalam R, yang akan mengeksekusi q()
dan kemudian memulai kembali sesi R yang bersih?
Dan ya, saya terlalu malas untuk mengetik q()
dan kemudian huruf R
:)
Apakah ada cara saya dapat membuat alias, dalam R, yang akan mengeksekusi q()
dan kemudian memulai kembali sesi R yang bersih?
Dan ya, saya terlalu malas untuk mengetik q()
dan kemudian huruf R
:)
save
parameter 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.
Jawaban:
Jika Anda berada di RStudio: command / ctrl + shift + F10
Anda juga bisa menggunakan
.rs.restartR()
.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:
refresh
akan menutup sesi saat ini dan memulai sesi baru.
.Last <- function() system("R")
bahkan nanti dalam siklus shutdown reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. Kemudian q()
terus kembali.
Saya menemukan bahwa .rs.restartR () bekerja mirip dengan menekan ctrl + shift + F10. tetapi dosis tidak membongkar paket
getAnywhere(".rs.restartR")
itu tampaknya masuk tools: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 terikat C-c C-e C-r
secara 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 shell
atau system
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
atau system
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 memasukkan restart.R
kode R.
Kelemahan dari ini dibandingkan metode lain adalah Anda tidak dapat melewatkan argumen baris perintah seperti yang --no-save
Anda 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:
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.
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
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 bawah etc
direktori R. Juga hati-hati untuk bagian terakhir dari jalur yang bin/x64
dapat 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)
}
startup::restart()
ke paket startup sebagai cara
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 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.
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)
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.
rm(list=ls())
tapi bukan itu yang Anda maksud kan?