Ленивая оценка в R - это влияет на назначение?
Я читаюэтот основной вопрос на переименование объектов и ответ @Shane на него, указывая мне на ленивую оценку. Теперь мне интересно, еслиassign
оценивается тоже лениво. Прямо как здесь:
assign("someNewName",someOldObject)
rm(someOldObject)
Причиной, по которой я задаюсь вопросом об этом, является следующий вариант использования: Предположим, я получил 10K + R объектов, каждый из которых имеет два атрибута, называемыхoriginalName
а такжеadditionalName
, Теперь я хочу написать функцию, которая может эффективно позволить пользователю переключаться с одного имени на другое без потери этих двух атрибутов. Примерно так ...
РЕДАКТИРОВАТЬ: на основе ввода @ Хэдли я изменил свой код.
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)
.