所以假设我有一个带有一堆.rdata文件的目录
file_names=as.list(dir(pattern="stock_*"))
[[1]]
[1] "stock_1.rdata"
[[2]]
[1] "stock_2.rdata"
Run Code Online (Sandbox Code Playgroud)
现在,如何通过一次调用加载这些文件?
我总是这样做:
for(i in 1:length(file_names)) load(file_names[[i]])
Run Code Online (Sandbox Code Playgroud)
但为什么我不能这样做do.call(load, file_names)?我想,没有一个适用的功能会工作,因为他们大多会回到名单,但没有要回来,只是这些文件需要被加载.我无法让这个get功能在这种情况下工作.想法?
Jos*_*ich 56
lapply但是你必须指定你想要加载的对象,.GlobalEnv否则它们被加载到创建(和销毁)的临时评估环境中lapply.
lapply(file_names,load,.GlobalEnv)
Run Code Online (Sandbox Code Playgroud)
就其价值而言,以上内容对我而言并不完全有效,因此我将发布如何调整该答案:
我在文件folder_with_files/由前缀prefix_pattern_,都是类型.RData,并分别命名为我想要什么他们在我的[R环境被命名为:例如:如果我救了var_x = 5,我将它保存为prefix_pattern_var_x.Data的folder_with_files。
我得到的文件名列表,然后生成自己的完整路径load它们,然后gsub把它(为:原来我不想要的部分object1由为例)folder_with_files/prefix_pattern_object1.RData,以object1作为objname我将到assign存储在对象RData文件。
file_names=as.list(dir(path = 'folder_with_files/', pattern="prefix_pattern_*"))
file_names = lapply(file_names, function(x) paste0('folder_with_files/', x))
out = lapply(file_names,function(x){
env = new.env()
nm = load(x, envir = env)[1]
objname = gsub(pattern = 'folder_with_files/', replacement = '', x = x, fixed = T)
objname = gsub(pattern = 'prefix_pattern_|.RData', replacement = '', x = objname)
# print(str(env[[nm]]))
assign(objname, env[[nm]], envir = .GlobalEnv)
0 # succeeded
} )
Run Code Online (Sandbox Code Playgroud)