저장된 R 객체를 새 객체 이름으로 로드할 수 있습니까?
다음을 사용하여 변수를 R 데이터 파일에 저장할 때save
저장된 세션에 있는 이름으로 저장됩니다.나중에 다른 세션에서 로드할 때 로드 스크립트가 알 수 없는 동일한 이름으로 로드됩니다.이 이름은 로드 세션에서 동일한 이름의 기존 변수를 덮어쓸 수 있습니다.기존 변수를 방해할 위험 없이 데이터 파일에서 지정된 변수 이름으로 개체를 안전하게 로드하는 방법이 있습니까?
예:
세션 저장 중:
x = 5
save(x, file="x.Rda")
세션 로드 중:
x = 7
load("x.Rda")
print(x) # This will print 5. Oops.
작동 방식:
x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5
개체 하나만 저장하는 경우에는 사용하지 마십시오..Rdata
파일, 사용.RDS
파일:
x <- 5
saveRDS(x, "x.rds")
y <- readRDS("x.rds")
all.equal(x, y)
다음을 사용합니다.
loadRData <- function(fileName){
#loads an RData file, and returns it
load(fileName)
get(ls()[ls() != "fileName"])
}
d <- loadRData("~/blah/ricardo.RData")
새 환경을 생성하고 해당 환경에 .rda 파일을 로드한 후 해당 환경에서 개체를 검색할 수 있습니다.그러나 개체의 원래 이름이 무엇인지 알고 있거나 파일에 저장된 개체가 하나뿐이라는 몇 가지 제한이 있습니다.
이 함수는 제공된 .rda 파일에서 로드된 개체를 반환합니다.파일에 둘 이상의 개체가 있으면 임의 개체가 반환됩니다.
load_obj <- function(f)
{
env <- new.env()
nm <- load(f, env)[1]
env[[nm]]
}
다음과 같은 방법을 사용할 수도 있습니다.
# Load the data, and store the name of the loaded object in x
x = load('data.Rsave')
# Get the object by its name
y = get(x)
# Remove the old object since you've stored it in y
rm(x)
위의 다른 솔루션과 마찬가지로 변수를 환경 변수에 로드합니다.여러 변수를 로드하는 경우 이 방법으로.Rda
그것들은 내 환경을 어지럽히지 않을 것입니다.
load("x.Rda", dt <- new.env())
데모:
x <- 2
y <- 1
save(x, y, file = "mydata.Rda")
rm(x, y)
x <- 123
# Load 'x' and 'y' into a new environment called 'dt'
load("mydata.Rda", dt <- new.env())
dt$x
#> [1] 2
x
#> [1] 123
개체가 하나인 Rdata 파일
assign('newname', get(load('~/oldname.Rdata')))
저장된 Rdata/RDS/Rda 파일이 아닌 일반 소스 파일로 이 작업을 수행하려는 경우 솔루션은 @Hong Oii에서 제공하는 솔루션과 매우 유사합니다.
load_obj <- function(fileName) {
local_env = new.env()
source(file = fileName, local = local_env)
return(local_env[[names(local_env)[1]]])
}
my_loaded_obj = load_obj(fileName = "TestSourceFile.R")
my_loaded_obj(7)
인쇄:
"arg 값은 7"
그리고 별도의 소스 파일 TestSourceFile.R.
myTestFunction = function(arg) {
print(paste0("Value of arg is ", arg))
}
다시 말하지만, 이 솔루션은 파일이 하나만 있는 경우에만 작동하고, 파일이 하나만 더 있는 경우에는 그 중 하나만 반환합니다(첫 번째 파일일 수도 있지만, 이는 보장되지 않습니다).
저는 @ricardo에서 답변을 확장하여 특정 변수를 선택할 수 있도록 합니다..Rdata
파일에 여러 변수가 포함되어 있습니다(답변을 편집할 수 있는 크레딧이 부족합니다).변수를 나열한 후 사용자 입력을 읽을 수 있도록 몇 개의 행을 추가합니다..Rdata
파일.
loadRData <- function(fileName) {
#loads an RData file, and returns it
load(fileName)
print(ls())
n <- readline(prompt="Which variable to load? \n")
get(ls()[as.integer(n)])
}
select_var <- loadRData('Multiple_variables.Rdata')
@ricardo에 이어 별도의 환경을 (효과적으로) 사용하는 또 다른 예
load_rdata <- function(file_path) {
res <- local({
load(file_path)
return(get(ls()))
})
return(res)
}
개체 하나만 반환될 것으로 예상되는 유사한 주의 사항
언급URL : https://stackoverflow.com/questions/5577221/can-i-load-a-saved-r-object-into-a-new-object-name
'programing' 카테고리의 다른 글
다른 스키마에 있는 DBLINK를 사용하여 Oracle에서 선택하는 방법은 무엇입니까? (0) | 2023.07.20 |
---|---|
임시 테이블이 있는 경우 해당 테이블 삭제 (0) | 2023.07.20 |
루비: 연결 없이 여러 줄의 문자열을 쓸 수 있습니까? (0) | 2023.07.20 |
UnicodeDecodeError: 'ascii' 코덱이 위치 13에서 바이트 0xe2를 디코딩할 수 없음: 순서가 범위에 없음(128) (0) | 2023.07.20 |
SpringBoot Servlet을 확장해야 하는 이유외부 Tomcat에 배포하는 동안 Initializer' (0) | 2023.07.20 |