En mi .Rprofile tengo las dos líneas siguientes se definen en mi .First
tablas de data.table() se ejecuta algunos de mis funciones .Rprofile
makeActiveBinding(".refresh", function() { system("R"); q("no") }, .GlobalEnv)
makeActiveBinding('.rm', function() {rm(list=ls(envir = .GlobalEnv),envir=.GlobalEnv); gc()}, .GlobalEnv)
Por lo general son inofensivas, a menos que los escribe por accidente ! El primero hace una función .refresh
que saldrá y reiniciará la sesión R. El segundo vacía el ambiente global. Sin embargo, al usar la función tables()
desde data.table
, se ejecutan estas dos funciones, lo que no es exactamente deseable.
Por el momento, los he quitado de mi .First
pero tengo curiosidad si hay una manera de evitar esto. Las líneas ofensivas en la función tables()
son:
tt = objects(envir = env, all.names = TRUE)
ss = which(as.logical(sapply(tt, function(x) is.data.table(get(x,
envir = env)))))
así es como yo las escribí al principio, pero mis dedos conseguido tan cansados de escribir '()' que decidí jugar con fuego ... – Justin
Aunque si intentas mantener ese fuego en marcha, con el tiempo acabará costándote más que unas pocas teclas;) –
¿No hay alguna forma de verificar el entorno actual? t, o un parámetro que dice "este es un entorno interactivo ...", y haga que sus funciones utilicen esa información para decidir si se ejecutan o no. –