Ho letto this basic question per rinominare gli oggetti e la risposta di @Shane ad esso, indicandomi una valutazione pigra. Ora mi chiedo se anche lo assign
sia valutato pigramente. Proprio come qui:Lazy evaluation in R - viene assegnato l'errore?
assign("someNewName",someOldObject)
rm(someOldObject)
Il motivo per cui mi chiedo su questo è il seguente caso d'uso: Si supponga Ho 10K + R oggetti ognuno dei quali ha due attributi chiamati originalName
e additionalName
. Ora voglio scrivere una funzione che possa consentire all'utente di passare da un nome all'altro senza perdere questi due attributi. Più o meno così ...
EDIT: basato sull'input di @ Hadley ho cambiato il mio codice.
switchObjectName <- function(x) {
n1 <- attributes(x)$originalName
n2 <- attributes(x)$additionalName
objName <- deparse(substitute(x))
if(objName == n1) {
delayedAssign(n2,x,assign.env=.GlobalEnv)
} else {
delayedAssign(n1,x,assign.env=.GlobalEnv)
}
rm(list=c(objName),envir=.GlobalEnv)
}
questo funziona bene, ma ho avuto un po 'di difficoltà per ottenere il giusto rm
dichiarazione. Ho provato rm(objName,envir=.GlobalEnv)
ma non riuscivo a farlo funzionare anche se objName è sicuramente un personaggio perché è il risultato di deparse(substitute(x)
.
Se ho letto correttamente la tua domanda, consulta 'delayedAssign', https://github.com/hadley/pryr/blob/master/R/assign-delayed.r e la sezione" Assegnazione: nomi dei collegamenti ai valori "su https://github.com/hadley/devtools/wiki/environments – hadley
grazie ancora una volta. in particolare quel puntatore al capitolo nella tua wiki ha aiutato molto a capire cosa sta realmente accadendo. 'delayedAssign' era davvero il suggerimento giusto. –