Tôi đã nhấn vào một bức tường cố gắng hợp nhất một tệp lớn và một tệp nhỏ hơn. Tôi có readmany các bài đăng khác về quản lý bộ nhớ trong R và chưa thể tìm phương thức khắc phục không cực đoan (đi 64bit, tải lên cụm, v.v.). Tôi đã thử một chút với gói bigmemory, nhưng không thể tìm ra giải pháp. Tôi nghĩ tôi sẽ cố gắng ở đây trước khi tôi giơ tay lên trong sự thất vọng.Hợp nhất lớn/Quản lý bộ nhớ
Mã Tôi đang chạy cũng giống như dưới đây:
#rm(list=ls())
localtempdir<- "F:/Temp/"
memory.limit(size=4095)
[1] 4095
memory.size(max=TRUE)
[1] 487.56
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 170485 4.6 350000 9.4 350000 9.4
Vcells 102975 0.8 52633376 401.6 62529185 477.1
client_daily<-read.csv(paste(localtempdir,"client_daily.csv",sep=""),header=TRUE)
object.size(client_daily)
>130MB
sbp_demos<-read.csv(paste(localtempdir,"sbp_demos",sep=""))
object.size(demos)
>0.16MB
client_daily<-merge(client_daily,sbp_demos,by.x="OBID",by.y="OBID",all.x=TRUE)
Error: cannot allocate vector of size 5.0 MB
Tôi đoán tôi đang hỏi là có cách nào thông minh xung quanh này mà không liên quan đến việc mua phần cứng mới?
- Tôi cần có thể
merge
để tạo đối tượng lớn hơn. - Sau đó tôi sẽ cần phải thực hiện các phép hồi quy v.v ... với đối tượng lớn hơn đó.
Tôi có nên bỏ cuộc không? Nên bigmemory có thể giúp giải quyết điều này?
Bất kỳ hướng dẫn nào được đánh giá cao.
chi tiết: R phiên bản 2.13.1 (2011/07/08) Hệ điều hành: i386-pc-mingw32/i386 (32-bit) Intel 2 Duo Core @ 2.33GHz, 3.48GB RAM
Bạn đã xem gói 'data.table' chưa? Đó là * nhanh chóng * cho việc hợp nhất lớn, và tình cờ có thể có nhiều bộ nhớ hiệu quả hơn để khởi động? – Chase
Điều này có thể sẽ không giải quyết được vấn đề của bạn, nhưng đây là điều bạn có thể thử. Nếu có bất kỳ cột nào trong bộ dữ liệu mà bạn không cần: hãy xóa chúng sau khi đọc dữ liệu, thực hiện gc() rồi thử hợp nhất lại. Một ý tưởng khác là chuyển đổi dữ liệu của bạn thành ma trận nếu có thể, vì chúng có xu hướng sử dụng ít bộ nhớ hơn. – Rguy