IT story

R 데이터 파일에서 지정한 변수 이름으로 개체를로드하려면 어떻게해야합니까?

hot-time 2020. 9. 18. 19:24
반응형

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)

새 환경을 만들고 .rda 파일을 해당 환경으로로드 한 다음 거기에서 개체를 검색 할 수 있습니다. 그러나 이것은 몇 가지 제한을 부과합니다. 객체의 원래 이름이 무엇인지 알고 있거나 파일에 하나의 객체 만 저장되어 있습니다.

이 함수는 제공된 .rda 파일에서로드 된 객체를 반환합니다. 파일에 둘 이상의 객체가 있으면 임의의 객체가 반환됩니다.

load_obj <- function(f)
{
    env <- new.env()
    nm <- load(f, env)[1]
    env[[nm]]
}

다음을 사용합니다.

loadRData <- function(fileName){
#loads an RData file, and returns it
    load(fileName)
    get(ls()[ls() != "fileName"])
}
d <- loadRData("~/blah/ricardo.RData")

다음과 같이 시도 할 수도 있습니다.

# 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))
}

Again, this solution only works if there is exactly one file, if there are more, then it will just return one of them (probably the first, but that is not guaranteed).


I'm extending the answer from @ricardo to allow selection of specific variable if the .Rdata file contains multiple variables (as my credits are low to edit an answer). It adds some lines to read user input after listing the variables contained in the .Rdata file.

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 file with one object

assign('newname', get(load('~/oldname.Rdata')))

참고URL : https://stackoverflow.com/questions/5577221/how-can-i-load-an-object-into-a-variable-name-that-i-specify-from-an-r-data-file

반응형