如何减少R中的数据大小?

时间:2019-03-21 02:22:09

标签: r

我有一个CSV文件,其中有600,000行和1339列,占地1.6 GB。 1337列是具有1或0值的二进制文件,另外2列是数字和字符变量。

我使用带有以下代码的包读取器提取了数据

VLU_All_Before_Wide <- read_csv("C:/Users/petas/Desktop/VLU_All_Before_Wide_Sample.csv")

当我使用以下代码检查对象大小时,大约为3 gb。

> print(object.size(VLU_All_Before_Wide),units="Gb")
3.2 Gb

下一步,使用以下代码,我想为LASSO回归创建训练和测试集。

set.seed(1234)
train_rows <- sample(1:nrow(VLU_All_Before_Wide), .7*nrow(VLU_All_Before_Wide))

train_set <- VLU_All_Before_Wide[train_rows,]
test_set <- VLU_All_Before_Wide[-train_rows,]

yall_tra <- data.matrix(subset(train_set, select=VLU_Incidence))
xall_tra <- data.matrix(subset(train_set, select=-c(VLU_Incidence,Replicate)))
yall_tes <- data.matrix(subset(test_set, select=VLU_Incidence))
xall_tes <- data.matrix(subset(test_set, select=-c(VLU_Incidence,Replicate)))

当我开始R会话时,RAM处于〜3 gb,而当我把上面所有代码都删除时,它现在已达到14 gb,这使我出现一个错误,说无法分配大小为4 gb的向量。除3个chrome窗口外,没有其他应用程序在运行。我删除了原始数据集,训练和测试数据集,但仅将.7的RAM减少到了1 GB。

rm(VLU_All_Before_Wide)
rm(test_set)
rm(train_set)

感谢有人可以指导我减少数据量的方法。

谢谢

1 个答案:

答案 0 :(得分:1)

对于大型数据集,

很费劲,因为它试图将所有数据加载并保存到RAM中。您可以使用R中可用的其他软件包来处理大型数据集,例如'bigmemoryff。检查我的答案here,该答案解决了类似的问题。

您还可以选择在R之外进行一些数据处理和操作,并删除不必要的列和行。但是,要处理错误数据集,最好使用功能强大的软件包。