我有38个SAS文件(每个300MB),我使用外部库中的read.xport函数打开它。我按以下方式打开它们:
library(foreign)
library(plyr)
my.files <- list.files(pattern="*.xpt")
list_of_data = llply(filenames, read.xport)
当我最多只有4个文件时,这是完美的,但是对于所有38个文件,我得到了内存过载(猥亵),因为R希望将它们全部存储在一个列表文件中。我知道这就是llply应该做的事情。有没有办法将所有.xpt文件导入为单独的data.frame或data.table?我只有38个物体。
还可能导致内存过载的是数据有3000个变量(列),我只需要30个。也许可以导入文件,保留这30个变量并导入下一个文件。我知道如何逐行完成这个,但我想把它写成循环。
file_one <- read.xport("file1.xpt")
file_one_selection <- data.frame(date=file_one$date,bank=file_one$bank.... etc)
rm(file_one)
非常感谢提前。 最好的问候,
添
答案 0 :(得分:3)
要读入一个文件:
library(foreign)
d1 <- read.xport("file1.xpt")
如果这不能正确地将项目作为数据框打开,您可以修改为:
d1 <- read.xport(as.data.frame("file1.xpt"))
如果您的sas文件被称为类似文件,例如file1 - file38,您可以使用以下内容循环它们:
for(i in 1:38){
assign(paste("d", i, sep = ""),
eval(read.xport(paste0("file", i, ".xpt"))))
}
如果这些不合适,请粘贴示例数据框或其他可重复性最低的示例。