개체 이름 바꾸기와 @Shane의 대답에 대해 this basic question을 읽었습니다. 나를 게으른 평가로 보았습니다. 이제 assign
이 느리게 평가되는지 궁금합니다. 그냥 여기처럼 : 나는 이것에 대해 궁금해하는 이유R의 지연 평가 - 영향을 받습니까?
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)
이라는 결과를 얻지 못했습니다.
질문을 올바르게 이해하면 'delayedAssign', https://github.com/hadley/pryr/blob/master/R/assign-delayed.r 및'배정 : 값에 이름 연결 '섹션을 참조하십시오. 다시 한 번 감사드립니다. https://github.com/hadley/devtools/wiki/environments – hadley
. 특히 위키에있는 장의 포인터가 실제로 진행되는 것을 이해하는 데 많은 도움이되었습니다. 'delayedAssign'은 옳은 힌트였습니다. –