How can I load an object into a variable name that I specify from an R data file?

前端 未结 7 2093
你的背包
你的背包 2020-11-28 19:50

When you save a variable in an R data file using save, it is saved under whatever name it had in the session that saved it. When I later go to load it from anot

相关标签:
7条回答
  • 2020-11-28 20:30

    Rdata file with one object

    assign('newname', get(load('~/oldname.Rdata')))
    
    0 讨论(0)
  • 2020-11-28 20:33

    You could also try something like:

    # 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)
    
    0 讨论(0)
  • 2020-11-28 20:35

    In case anyone is looking to do this with a plain source file, rather than a saved Rdata/RDS/Rda file, the solution is very similar to the one provided by @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)
    

    Prints:

    [1] "Value of arg is 7"

    And in the separate source file 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).

    0 讨论(0)
  • I use the following:

    loadRData <- function(fileName){
    #loads an RData file, and returns it
        load(fileName)
        get(ls()[ls() != "fileName"])
    }
    d <- loadRData("~/blah/ricardo.RData")
    
    0 讨论(0)
  • 2020-11-28 20:51

    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')
    
    
    
    0 讨论(0)
  • 2020-11-28 20:53

    If you're just saving a single object, don't use an .Rdata file, use an .RDS file:

    x <- 5
    saveRDS(x, "x.rds")
    y <- readRDS("x.rds")
    all.equal(x, y)
    
    0 讨论(0)
提交回复
热议问题