Rya*_*son 85 r variable-names rdata
使用时将变量保存在R数据文件中时save,它将以保存它的会话中的名称保存.当我稍后从另一个会话加载它时,它加载了相同的名称,加载脚本不可能知道.此名称可能会覆盖加载会话中同名的现有变量.有没有办法将数据文件中的对象安全地加载到指定的变量名中,而没有破坏现有变量的风险?
x = 5
save(x, file="x.Rda")
Run Code Online (Sandbox Code Playgroud)
x = 7
load("x.Rda")
print(x) # This will print 5. Oops.
Run Code Online (Sandbox Code Playgroud)
x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5
Run Code Online (Sandbox Code Playgroud)
had*_*ley 83
如果您只是保存单个对象,请不要使用.Rdata文件,请使用.RDS文件:
x <- 5
saveRDS(x, "x.rds")
y <- readRDS("x.rds")
all.equal(x, y)
Run Code Online (Sandbox Code Playgroud)
Hon*_*Ooi 33
您可以创建新环境,将.rda文件加载到该环境中,然后从那里检索对象.但是,这确实会带来一些限制:要么您知道对象的原始名称是什么,要么只保存文件中的一个对象.
此函数返回从提供的.rda文件加载的对象.如果文件中有多个对象,则返回任意一个对象.
load_obj <- function(f)
{
env <- new.env()
nm <- load(f, env)[1]
env[[nm]]
}
Run Code Online (Sandbox Code Playgroud)
ric*_*rdo 32
我使用以下内容:
loadRData <- function(fileName){
#loads an RData file, and returns it
load(fileName)
get(ls()[ls() != "fileName"])
}
d <- loadRData("~/blah/ricardo.RData")
Run Code Online (Sandbox Code Playgroud)
by0*_*by0 22
您也可以尝试以下方法:
# 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)
Run Code Online (Sandbox Code Playgroud)
与上面的其他解决方案类似,我将变量加载到环境变量中。这样,如果我从 加载多个变量.Rda,这些变量就不会扰乱我的环境。
load("x.Rda", dt <- new.env())
Run Code Online (Sandbox Code Playgroud)
演示:
load("x.Rda", dt <- new.env())
Run Code Online (Sandbox Code Playgroud)