Я прочитал этот основной вопрос о переименовании объектов и @Shane, чтобы ответить на него, указав на ленивую оценку. Теперь я задаюсь вопросом, оценивается ли assign
лениво. Также как здесь:
assign("someNewName",someOldObject)
rm(someOldObject)
Причина, по которой я удивляюсь, это следующий прецедент: предположим, что у меня есть объекты 10K + R, каждый из которых имеет два атрибута, называемых originalName
и additionalName
. Теперь я хочу написать функцию, которая может позволить пользователю переключиться с одного имени на другое без потери этих двух атрибутов. Примерно так...
EDIT: на основе ввода @Hadley я изменил свой код.
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)
}
это работает хорошо, но мне было довольно сложно получить инструкцию rm
. Я пробовал rm(objName,envir=.GlobalEnv)
, но не смог заставить его работать, хотя objName определенно является символом, потому что это результат deparse(substitute(x)
.