를 사용하여 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)
답변
저장된 Rdata / RDS / Rda 파일이 아닌 일반 소스 파일로이 작업을 수행하려는 경우 솔루션은 @Hong Ooi에서 제공하는 것과 매우 유사합니다.
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)
인쇄물:
[1] “arg 값은 7입니다.”
그리고 별도의 소스 파일 TestSourceFile.R
myTestFunction = function(arg) {
print(paste0("Value of arg is ", arg))
}
다시 말하지만,이 솔루션은 정확히 하나의 파일이있는 경우에만 작동하고 더 많은 파일이 있으면 그중 하나를 반환합니다 (아마도 첫 번째 파일이지만 보장되지는 않음).
답변
.Rdata
파일에 여러 변수가 포함되어있는 경우 특정 변수를 선택할 수 있도록 @ricardo의 답변을 확장하고 있습니다 (답 을 편집 할 수있는 크레딧이 낮기 때문에). .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')
답변
하나의 객체가있는 Rdata 파일
assign('newname', get(load('~/oldname.Rdata')))