我想在RStudio服务器上运行模型,但出现此错误。
错误:无法分配大小为57.8 Gb的向量
这就是我的数据,它有10,000行。
latitude longitude close_date close_price
1 1.501986 86.35068 2014-08-16 22:25:31.925431 1302246.3
2 36.367095 -98.66428 2014-08-05 06:34:00.165876 147504.5
3 36.599284 -97.92470 2014-08-12 23:48:00.887510 137400.6
4 67.994791 64.68859 2014-08-17 05:27:01.404296 -14112.0
这是我的模特。
library(caret)
training.samples <- data$close_price %>%
createDataPartition(p = 0.8, list = FALSE)
train.data <- data[training.samples, ]
test.data <- datatraining.samples, ]
model <- train(
close_price~., data = train.data, method = "knn",
trControl = trainControl("cv", number = 1),
preProcess = c("center","scale"),
tuneLength = 1
)
我的EC2实例具有超过57 GB的可用空间。这就是内存。
total used free shared buffers cached
Mem: 65951628 830424 65121204 64 23908 215484
-/+ buffers/cache: 591032 65360596
Swap: 0 0 0
它也有足够的存储空间。这是硬盘空间。
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 32965196 64 32965132 1% /dev
tmpfs 32975812 0 32975812 0% /dev/shm
/dev/xvda1 103079180 6135168 96843764 6% /
这些是机器上的详细信息。
R version 3.5.3 (2019-03-11)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Amazon Linux AMI 2018.03
答案 0 :(得分:2)
由于there's always a temporary value "*tmp*"
以及最终值,您需要2到3倍的预计对象大小才能对其进行任何有用的处理。 (该链接讨论了子集分配,但是它也应用了<-
函数的任何使用。)此外,要将新值分配给对象名称,必须有连续的可用内存。因此,即使所谓的“可用”内存也可能不是连续的。您要么需要购买更多的存储空间,要么减小模型的大小。计算全部在RAM或等效RAM中完成。除非您的操作系统提供虚拟内存,否则通常不会进行任何磁盘交换。