在R中打开许多大型SAS文件

时间:2014-12-01 14:02:45

标签: r import sas

我有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)

非常感谢提前。 最好的问候,

1 个答案:

答案 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"))))
}

如果这些不合适,请粘贴示例数据框或其他可重复性最低的示例。