如何将 AWS/S3 中的多个 .Rdata 对象循环到 R 中的列表中
How to loop multiple .Rdata objects from AWS/S3 into a list in 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]
所以我有几个大的 .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]