2011-08-30 37 views
6

Gói arules trong R sử dụng giao dịch của lớp. Vì vậy, để sử dụng chức năng apriori() Tôi cần phải chuyển đổi dữ liệu hiện có của mình. Tôi đã có Ma trận với 2 cột và khoảng 1.6mm hàng và cố gắng chuyển đổi dữ liệu như sau:Dữ liệu lớn chuyển thành "giao dịch" từ gói gói

transaction_data <- as(split(original_data[,"id"], original_data[,"type"]), "transactions") 

trong đó original_data là ma trận dữ liệu của tôi. Vì số lượng dữ liệu tôi đã sử dụng máy AWS Amazon lớn nhất với RAM 64 GB. Sau một thời gian tôi nhận được

dẫn vector vượt quá giới hạn độ dài vector trong 'AnswerType'

Các sử dụng bộ nhớ của máy vẫn 'chỉ' ở 60%. Đây có phải là giới hạn dựa trên R không? Có cách nào để làm việc xung quanh điều này khác hơn là sử dụng lấy mẫu? Khi chỉ sử dụng 1/4 dữ liệu, phép biến đổi hoạt động tốt.

Chỉnh sửa: Như đã chỉ ra, một trong các biến là yếu tố thay vì ký tự. Sau khi thay đổi quá trình chuyển đổi đã được xử lý nhanh chóng và chính xác.

+0

Tôi chơi xung quanh với nó nhiều hơn một chút, và khi tôi giảm số lượng dữ liệu một chút, tôi nhận được lỗi 'Lỗi trong unique.default (...) chiều dài 547601298 là quá lớn cho hashing' Rõ ràng một số hàm 'MKsetup()' trong mã Hệ thống của R, trong tệp unique.c ngăn các vectơ vượt quá một độ dài nhất định. – Marco

+0

Bạn có thể đăng kết quả của 'str (original_data)'? Nó sẽ là tốt để biết nếu có một số vấn đề phát sinh trong dữ liệu. – Iterator

+0

Bạn có thể tạo giả mạo nhưng ví dụ đại diện không? –

Trả lời

3

Tôi nghi ngờ rằng sự cố của bạn đang phát sinh vì một trong các hàm sử dụng số nguyên (thay vì, nói, nổi) để lập chỉ mục giá trị. Trong mọi trường hợp, kích thước không phải là quá lớn, vì vậy điều này là đáng ngạc nhiên. Có lẽ dữ liệu có một số vấn đề khác, chẳng hạn như các ký tự là các yếu tố?

Nói chung, tôi thực sự khuyên bạn nên sử dụng tệp ánh xạ bộ nhớ, qua bigmemory, bạn cũng có thể chia và xử lý qua bigsplit hoặc mwhich. Nếu tải xuống dữ liệu phù hợp với bạn, bạn cũng có thể sử dụng kích thước mẫu nhỏ hơn nhiều và tiết kiệm được $$. :)

+0

Bạn ở bên phải, một trong các biến là một yếu tố thay vì một char. Tôi sẽ xem xét gói 'bigmemory', cảm ơn lời khuyên – Marco

Các vấn đề liên quan