Nel mio .Rprofile Ho le seguenti due linee definite nel mio .First
tavoli di data.table() la funzione viene eseguito alcune delle mie funzioni .Rprofile
makeActiveBinding(".refresh", function() { system("R"); q("no") }, .GlobalEnv)
makeActiveBinding('.rm', function() {rm(list=ls(envir = .GlobalEnv),envir=.GlobalEnv); gc()}, .GlobalEnv)
Sono di solito innocui, a meno che non li si digita per sbaglio ! Il primo esegue una funzione .refresh
che chiude e riavvia la sessione R. Il secondo svuota l'ambiente globale. Tuttavia, quando si utilizza la funzione tables()
da data.table
, vengono eseguite queste due funzioni che non sono esattamente desiderabili.
Per il momento, li ho rimossi dal mio .First
ma sono curioso di sapere se c'è un modo per evitarlo. Le linee offensive nella funzione tables()
sono:
tt = objects(envir = env, all.names = TRUE)
ss = which(as.logical(sapply(tt, function(x) is.data.table(get(x,
envir = env)))))
Ecco come li ho scritto all'inizio, ma le mie dita ottenuto così stanco di digitare '()' che ho deciso di giocare con il fuoco ... – Justin
Abbastanza giusto Se si tenta di mantenere il fuoco acceso, però, nel tempo finirà per costare più di alcune sequenze di tasti;) –
Non c'è un modo per controllare l'ambiente attuale t, o un parametro che dice "questo è un ambiente interattivo ...", e fai in modo che le tue funzioni utilizzino tali informazioni per decidere se eseguire o meno? –