load
래퍼를 만들어 기존 작업 영역과 충돌하는 개체를 만드는 방법은 어떻습니까? 당신이
m1 <- matrix(1:4, ncol=2)
m2 <- matrix(5:8, ncol=2)
save(m1,m2, file="t1.RData")
m1 <- matrix(11:14, ncol=2)
m2 <- matrix(15:18, ncol=2)
save(m1,m2, file="t2.RData")
당신은 m1
의 현재 값이 표시됩니다 시도하고 m2
우리가 실행하는 경우 다음
m1
# [,1] [,2]
# [1,] 11 13
# [2,] 12 14
m2
# [,1] [,2]
# [1,] 15 17
# [2,] 16 18
을 경우
safeload<-function(file, env=parent.frame()) {
tmp<-new.env()
load.names <- load(file, tmp)
exist.names <- ls(envir=env)
new.names <- make.names(c(exist.names, load.names), unique=TRUE)[-seq_along(exist.names)]
Map(assign, new.names, mget(load.names, tmp), MoreArgs=list(envir=env))
attr(new.names, "orig.names) <- load.names
invisible(new.names)
}
다음 예를 Fopr
safeload("t1.RData")
m1
및 m2, but since those exist, we use
make.name() to create unique names for those values. It renames the
m1 to
m1.1`을 다시로드하려고 시도합니다. 이제 우리는 가지고있다
m1
# [,1] [,2]
# [1,] 11 13
# [2,] 12 14
m1.1
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
이 함수는 절대로 값을 덮어 써서는 안되며, 항상 값을 덧붙여서 이름을 고유하게 만듭니다. 따라서 동일한 RData 파일에서 safeload
을 계속 실행하면 새로운 변수가 생성됩니다. 이 함수는 방금로드 한 객체의 최종 이름을 반환합니다 (RData 파일의 원래 이름을 "orig.names"라는 속성으로 사용).
두 RData 파일 만 "병합"하려는 경우 , something like
newds<-new.env()
safeload("t1.RData", newds)
safeload("t2.RData", newds)
save(list=ls(envir=newsd), envir=newds, file="t3.RData")
이러한 변수는 실제로 전역 환경에로드되지 않습니다.
[triothing try anything?] (http://whathaveyoutried.com) – Barranka
Barranka, 예. 웹을 검색했지만 관련성이 없습니다. – jpcgandre
그래서 "dataset"은'save()'를 통해 RData 파일에 저장된 R 객체를 의미합니까? 그리고 지금 당신은'load()'를 사용하고 있지만 객체 객체는 매번 다시 쓰여지고 있습니까? 로드하는 동안 명시 적으로 모든 오브젝트의 이름을 지정 하시겠습니까? 아니면 이름 충돌을 막기를 원합니 까? 글로벌 환경 만 사용 중이거나 사용자 지정 환경에 개체를로드하고 있습니까? – MrFlick