Bueno, puedes limpiar tu espacio de trabajo con rm(list=ls())pero eso no es lo que quieres decir, ¿verdad?
Sacha Epskamp
2
¿También desea separar los paquetes y otras cosas que pueda haber adjuntado?
Spacedman
2
Quizás una sugerencia sería agregar un nuevo saveparámetro de opción q(), por ejemplo "r", que reinicia R sin guardar el espacio de trabajo. A continuación, un alias para q("r")podría ser asignado a una nueva función que se reinicia R.
Creo que abrir una "sesión limpia de R" requiere que se eliminen los datos 1 de la sesión actual; 2-Se descargan los paquetes de la sesión actual. .rs.restartR()no parece hacer ninguna de estas cosas en mi máquina ..
Steadyfish
3
Encuentro el .rs.restartR () útil para los casos en que R no liberaría memoria incluso después de eliminar (list = ls ()); gc () ;. Esto definitivamente libera la memoria. También me gusta el hecho de que no separa paquetes.
Richard DiSalvo
56
Dependiendo de cómo inicie R, intente colocar una de estas líneas en su .Rprofilearchivo:
o .Last <- function() system("R")incluso más tarde en el ciclo de apagado reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE). Luego q()sigue volviendo.
Martin Morgan
1
Asegúrese de que R esté en su RUTA.
G. Grothendieck
2
Esta solución funciona pero no es reproducible cuando otros ejecutan mi script. ¿Se debe incluir un comando en el script R para reiniciar la sesión R? (la razón es que quiero todos los paquetes se separen)
Heisenberg
13
Encontré que .rs.restartR () funciona de manera similar a presionar ctrl + shift + F10. pero dosificar no descargar los paquetes
Funciona en RStudio, pero no estoy seguro de que haya una forma de hacerlo funcionar en otro lugar. Desde getAnywhere(".rs.restartR")parece estar en tools:rstudio. No he tenido suerte accediendo a eso en una sesión pura de R.
Gregor Thomas
11
.rs.restartR()no descarga los paquetes, por lo que no es exactamente lo mismo quectrl+shift+f10
Arthur
5
Como otra alternativa, Emacs ESS (> = 16.10) puede recargar el proceso R inferior a través del inferior-ess-r-reload-hookcual está vinculado C-c C-e C-rpor defecto.
Publicación anterior, pero ninguna de las respuestas funciona (para mí, estoy usando Windows, no he probado otras), así que agregaré mi solución. Es posible que parte de mi terminología no esté aquí, pero esto debería transmitir el punto:
Las respuestas anteriores no funcionan del todo
La mayoría de las respuestas enviadas aquí implican el uso de shello systemque no funciona del todo porque mientras abren una nueva consola R y le dan instrucciones a la consola original para que se cierre, la nueva consola es un proceso que se ejecuta en el contexto de la aplicación de la consola anterior. Eso significa que la consola original no se puede cerrar hasta que se cierre la nueva consola. Algunos de los usuarios anteriores, como hedgedandlevered, informaron que cerrar la consola original obliga a cerrar la nueva consola. Cuando lo intento, la nueva consola se abre, pero la consola anterior permanece abierta en un estado congelado hasta que se cierra la nueva.
El problema básico es llamar shello systemno cambia el contexto de la aplicación de la consola original a la nueva y, por lo tanto, el proceso original no puede terminar hasta que se cierra la nueva consola.
Alternativa que me funciona
En su lugar, use el shell.execque normalmente se usaría para abrir un archivo en la aplicación predeterminada según el tipo de archivo. Cuando se usa en un .exe, aparentemente, ejecuta el ejecutable. Sin embargo, la diferencia importante es que el sistema inicia la aplicación en su propio contexto separado. Así que aquí está el código que me funciona:
Deberá editar la ruta del archivo /bin/x64/Rgui.exepara que coincida con lo que use para iniciar R. Simplemente coloque esta línea en su .Rprofilearchivo, luego puede llamarlo ingresando restart.Rsu código R.
La desventaja de esto con respecto a otros métodos es que no puede pasar argumentos de línea de comando --no-savecomo lo haría con solo shell, pero al menos esto le permitirá cerrar el proceso R original.
Después de buscar una solución a esto, resolví mi problema basándome en esta solución aquí , usando el R Package RDCOMClient . La siguiente solución solo funciona dentro de RStudio (Windows), una vez que simula la pulsación de teclas ctrl + shift + F10 .
El paquete RDCOMClient debe instalarse con el siguiente comando:
En la última línea del código anterior, la tecla 'ctrl' está representada por '^' y la tecla de mayúsculas por '+'. Todas las explicaciones de estas representaciones clave están disponibles aquí .
Justo después de ejecutar la última línea del código anterior, se restablecerá toda la sesión de R en RStudio, según el comentario de @steadyfish . Es decir, elimina todos los datos de la sesión actual y descarga todos los paquetes cargados en la sesión.
En Windows es necesario modificar el Rprofile.sitearchivo. Está en el etcdirectorio de R. También tenga cuidado con la última parte de la ruta que bin/x64puede cambiar de acuerdo con la configuración de su sistema. Espero que esto también ayude a otros.
De acuerdo con la idea de Martin Morgan de usar .Last(); esto reinicia R con el mismo conjunto de opciones de línea de comandos como se llamó anteriormente:
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)
}
Para su información, he añadido startup::restart()a la puesta en marcha del paquete como una forma convenint de R. reinicio
HenrikB
1
Creo que uno se da cuenta del mejor uso de R configurando un directorio de trabajo actual en opciones. Luego, cada vez que su espacio de trabajo / archivo de sesión comience a aparecer o tenga suficiente de su trabajo en él (entre proyectos), puede simplemente cambiar el nombre de este archivo de sesión predeterminado en el directorio de trabajo después de cerrar R y R / Rstudio lo iniciará automáticamente en un nuevo espacio de trabajo / archivo de sesión, sin perturbar su trabajo actual.
Recuerde salir de R y cambiar el nombre del archivo de sesión actual
Por supuesto, si no desea guardar el trabajo actual, debe asegurarse de restablecer los objetos o las operaciones en ellos se realizaron después de copiar de los objetos originales para que estén como están. Créame, saber que siempre puede cargar los espacios de trabajo antiguos es una tentación, pero es más útil que no.
En resumen, salir de R, le da un espacio al salir, significa que este espacio de trabajo está lleno, cámbiele el nombre después de completar el cierre y reinicie R / Rstudio con un espacio de trabajo nuevo. Siempre puede cargar objetos seleccionados en el nuevo espacio de trabajo. Idealmente, todo el trabajo importante debe estar en los directorios de proyectos, pero aún necesita un historial de sus trabajos para volver a él en ocasiones y las sesiones guardadas son útiles en algún momento una vez que se encuentra en proyectos más largos. Si no necesitas nada de eso, solorm(list=ls())
Además, me gusta la RDComClientidea de @Eduardo Alvin pero ha sido descatalogada.
OPCIÓN ALTERNATIVA
Una alternativa sencilla para deshacerse del equipaje en cualquier momento dentro de su espacio de trabajo es utilizar save.image
Creo que esto es lo que necesita si ha usado setwd () antes de llamar a refresh (aunque ni esta ni la versión original funcionan para mí, ya que reinicia R y luego se cierra, nunca se abre una nueva ventana. Si alguien puede comentar sobre esto, por favor hazlo)
cuando intento esto, se abre una nueva ventana, pero la ventana anterior se mantiene abierta en un estado congelado hasta que se cierra la nueva ventana
Mateo
0
He escrito la siguiente función. ¡Recuerda! Solo puede usarlo una vez, luego debe volver a cargarlo después de que se reinicie la sesión de R.
clc <- function() {
rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment
gc() #grabage colector
cat("\014") #clc
.rs.restartR() #clear session
}
rm(list=ls())
pero eso no es lo que quieres decir, ¿verdad?save
parámetro de opciónq()
, por ejemplo"r"
, que reinicia R sin guardar el espacio de trabajo. A continuación, un alias paraq("r")
podría ser asignado a una nueva función que se reinicia R.Respuestas:
Si está en RStudio: comando / ctrl + shift + F10
También puedes usar
fuente
.rs.restartR()
no parece hacer ninguna de estas cosas en mi máquina ..Dependiendo de cómo inicie R, intente colocar una de estas líneas en su
.Rprofile
archivo:makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv) makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
Luego ingrese esto en la consola R:
cerrará la sesión actual y comenzará una nueva.
fuente
.Last <- function() system("R")
incluso más tarde en el ciclo de apagadoreg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. Luegoq()
sigue volviendo.Encontré que .rs.restartR () funciona de manera similar a presionar ctrl + shift + F10. pero dosificar no descargar los paquetes
fuente
getAnywhere(".rs.restartR")
parece estar entools:rstudio
. No he tenido suerte accediendo a eso en una sesión pura de R..rs.restartR()
no descarga los paquetes, por lo que no es exactamente lo mismo quectrl+shift+f10
Como otra alternativa, Emacs ESS (> = 16.10) puede recargar el proceso R inferior a través del
inferior-ess-r-reload-hook
cual está vinculadoC-c C-e C-r
por defecto.fuente
Publicación anterior, pero ninguna de las respuestas funciona (para mí, estoy usando Windows, no he probado otras), así que agregaré mi solución. Es posible que parte de mi terminología no esté aquí, pero esto debería transmitir el punto:
Las respuestas anteriores no funcionan del todo
La mayoría de las respuestas enviadas aquí implican el uso de
shell
osystem
que no funciona del todo porque mientras abren una nueva consola R y le dan instrucciones a la consola original para que se cierre, la nueva consola es un proceso que se ejecuta en el contexto de la aplicación de la consola anterior. Eso significa que la consola original no se puede cerrar hasta que se cierre la nueva consola. Algunos de los usuarios anteriores, como hedgedandlevered, informaron que cerrar la consola original obliga a cerrar la nueva consola. Cuando lo intento, la nueva consola se abre, pero la consola anterior permanece abierta en un estado congelado hasta que se cierra la nueva.El problema básico es llamar
shell
osystem
no cambia el contexto de la aplicación de la consola original a la nueva y, por lo tanto, el proceso original no puede terminar hasta que se cierra la nueva consola.Alternativa que me funciona
En su lugar, use el
shell.exec
que normalmente se usaría para abrir un archivo en la aplicación predeterminada según el tipo de archivo. Cuando se usa en un .exe, aparentemente, ejecuta el ejecutable. Sin embargo, la diferencia importante es que el sistema inicia la aplicación en su propio contexto separado. Así que aquí está el código que me funciona:makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)
Deberá editar la ruta del archivo
/bin/x64/Rgui.exe
para que coincida con lo que use para iniciar R. Simplemente coloque esta línea en su.Rprofile
archivo, luego puede llamarlo ingresandorestart.R
su código R.La desventaja de esto con respecto a otros métodos es que no puede pasar argumentos de línea de comando
--no-save
como lo haría con soloshell
, pero al menos esto le permitirá cerrar el proceso R original.fuente
Después de buscar una solución a esto, resolví mi problema basándome en esta solución aquí , usando el R Package RDCOMClient .
La siguiente solución solo funciona dentro de RStudio (Windows), una vez que simula la pulsación de teclas ctrl + shift + F10 .
El paquete RDCOMClient debe instalarse con el siguiente comando:
install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")
El código para simular las pulsaciones de teclas dentro de RStudio (Windows 10) es:
library(RDCOMClient) wsh <- COMCreate("Wscript.Shell") wsh$SendKeys("^+{F10}")
En la última línea del código anterior, la tecla 'ctrl' está representada por '^' y la tecla de mayúsculas por '+'. Todas las explicaciones de estas representaciones clave están disponibles aquí .
Justo después de ejecutar la última línea del código anterior, se restablecerá toda la sesión de R en RStudio, según el comentario de @steadyfish . Es decir, elimina todos los datos de la sesión actual y descarga todos los paquetes cargados en la sesión.
fuente
Escriba esta función en su .Rprofile
r <- function() { assign('.Last', function() {system('R')}, envir = globalenv()) quit(save = 'no') }
r()
reinicia su sesión R. Los paquetes cargados no se recargan. Su entorno no se salvará.Funciona para Linux. No tengo idea de lo que puede suceder en otros sistemas operativos
fuente
Necesitaba la misma funcionalidad de sesión de actualización en Windows y terminé con una versión ligeramente modificada del código:
makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)
En Windows es necesario modificar el
Rprofile.site
archivo. Está en eletc
directorio de R. También tenga cuidado con la última parte de la ruta quebin/x64
puede cambiar de acuerdo con la configuración de su sistema. Espero que esto también ayude a otros.fuente
De acuerdo con la idea de Martin Morgan de usar
.Last()
; esto reinicia R con el mismo conjunto de opciones de línea de comandos como se llamó anteriormente: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) }
fuente
startup::restart()
a la puesta en marcha del paquete como una forma convenint de R. reinicioCreo que uno se da cuenta del mejor uso de R configurando un directorio de trabajo actual en opciones. Luego, cada vez que su espacio de trabajo / archivo de sesión comience a aparecer o tenga suficiente de su trabajo en él (entre proyectos), puede simplemente cambiar el nombre de este archivo de sesión predeterminado en el directorio de trabajo después de cerrar R y R / Rstudio lo iniciará automáticamente en un nuevo espacio de trabajo / archivo de sesión, sin perturbar su trabajo actual.
Recuerde salir de R y cambiar el nombre del archivo de sesión actual
Por supuesto, si no desea guardar el trabajo actual, debe asegurarse de restablecer los objetos o las operaciones en ellos se realizaron después de copiar de los objetos originales para que estén como están. Créame, saber que siempre puede cargar los espacios de trabajo antiguos es una tentación, pero es más útil que no.
En resumen, salir de R, le da un espacio al salir, significa que este espacio de trabajo está lleno, cámbiele el nombre después de completar el cierre y reinicie R / Rstudio con un espacio de trabajo nuevo. Siempre puede cargar objetos seleccionados en el nuevo espacio de trabajo. Idealmente, todo el trabajo importante debe estar en los directorios de proyectos, pero aún necesita un historial de sus trabajos para volver a él en ocasiones y las sesiones guardadas son útiles en algún momento una vez que se encuentra en proyectos más largos. Si no necesitas nada de eso, solo
rm(list=ls())
Además, me gusta la
RDComClient
idea de @Eduardo Alvin pero ha sido descatalogada.OPCIÓN ALTERNATIVA
Una alternativa sencilla para deshacerse del equipaje en cualquier momento dentro de su espacio de trabajo es utilizar
save.image
save.image("Rstreamingscience.data") quit(save='no') load("Rstreamingscience.data") ##G:/ADA registers## save.image("Rstreamingscience.data")
Esto le permite entrar y salir cuando quiera y abrir tantos espacios de trabajo como necesite.
fuente
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)
o con --save o --no-save
paste0(R.home(),"/bin/i386/R --no-save")
Creo que esto es lo que necesita si ha usado setwd () antes de llamar a refresh (aunque ni esta ni la versión original funcionan para mí, ya que reinicia R y luego se cierra, nunca se abre una nueva ventana. Si alguien puede comentar sobre esto, por favor hazlo)
fuente
He escrito la siguiente función. ¡Recuerda! Solo puede usarlo una vez, luego debe volver a cargarlo después de que se reinicie la sesión de R.
clc <- function() { rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment gc() #grabage colector cat("\014") #clc .rs.restartR() #clear session }
A veces, separar un paquete también ayuda.
fuente