如何将多个 .Rdata 对象从 AWS/S3 循环到 R 中的列表中

问题描述

所以我有几个大的 .Rdata 对象存储在一个 PUMS 数据桶中。我需要将 10 个文件加载到 R(10 年的数据)中进行分析。我在将多个文件从 S3 加载或循环到 R 中时遇到问题。

以下是一次加载一个对象的方法

s3load("dataUS19.Rdata",bucket = "my bucket")

这会产生 ram 问题,因此一次加载一个,从而创建一个存储桶数据框,然后尝试此循环:

awsDF <- get_bucket_df("my bucket") # getting bucket   
data <- list() # creating list 

data <- awsDF$Key[grep("dataUS",awsDF$Key)]  #specify only the .Rdata objects that start with dataUS
for (match in data) {   
s3load(object=match,bucket="my bucket"))

问题是循环确实一次加载了多个对象,但它没有将它们存储为列表。它们作为单独的 dfs/objects 加载,这会产生 ram 问题(能够加载大约 6 个文件

我不是程序员并且在 Stata 中接受过培训,因此对于从 S3 的列表中获取多个 .Rdata 对象的任何帮助将不胜感激。

解决方法

考虑加载环境。与基础 R 的 load 类似,aws.s3 的 s3load 维护一个 envir 参数。

rdata <- awsDF$Key[grep("dataUS",awsDF$Key)]

data_list <- lapply(rdata,function(file) {
    s3load(file,bucket="my bucket",envir=(temp_env <- new.env()))
    as.list.environment(temp_env)
})

如果 .Rdata 文件只包含一个对象,则提取第一项:

as.list.environment(temp_env)[1]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...