¿Hay alguna manera de que pueda crear un alias, dentro de R, que se ejecute q()
y luego reinicie una sesión de R limpia?
Y sí, soy demasiado vago para escribir q()
y luego la letra R
:)
¿Hay alguna manera de que pueda crear un alias, dentro de R, que se ejecute q()
y luego reinicie una sesión de R limpia?
Y sí, soy demasiado vago para escribir q()
y luego la letra R
:)
save
pará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.
Respuestas:
Si está en RStudio: comando / ctrl + shift + F10
También puedes usar
.rs.restartR()
.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:
refresh
cerrará la sesión actual y comenzará una nueva.
.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.
Encontré que .rs.restartR () funciona de manera similar a presionar ctrl + shift + F10. pero dosificar no descargar los paquetes
getAnywhere(".rs.restartR")
parece estar en tools: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
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
o system
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
o system
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 ingresando restart.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 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:
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.
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
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 el etc
directorio de R. También tenga cuidado con la última parte de la ruta que bin/x64
puede 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)
}
startup::restart()
a la puesta en marcha del paquete como una forma convenint de R. reinicio
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 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.
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)
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.
rm(list=ls())
pero eso no es lo que quieres decir, ¿verdad?