Tôi có một khung dữ liệu lớn chiếm khoảng 900MB ram. Sau đó, tôi đã cố gắng để sửa đổi nó như thế này:Hết bộ nhớ khi sửa đổi một tệp dữ liệu lớn R.
dataframe[[17]][37544]=0
Dường như làm cho R sử dụng nhiều hơn ram 3G và R than phiền: (. Tôi đang trên một máy 32bit) "Lỗi không thể phân bổ vector kích thước 3,0 Mb",
tôi thấy cách này là tốt hơn:
dataframe[37544, 17]=0
nhưng dấu chân R vẫn tăng lên gấp đôi và lệnh mất khá nhiều thời gian để chạy.
Từ nền C/C++, tôi thực sự bối rối về hành vi này. Tôi nghĩ rằng một cái gì đó như dataframe[37544, 17]=0
nên được hoàn thành trong nháy mắt mà không cần tốn thêm bất kỳ bộ nhớ nào (chỉ cần thay đổi một ô). R đang làm gì cho những lệnh mà tôi đã đăng? Cách đúng để sửa đổi một số phần tử trong một khung dữ liệu là gì mà không cần tăng gấp đôi bộ nhớ?
Cảm ơn bạn rất nhiều vì đã giúp đỡ!
Tao
(Cơ sở) R không nổi tiếng khi xử lý các cấu trúc dữ liệu lớn. Bạn sẽ muốn xem xét một số kết hợp của các gói ** ff **, ** bigmemory ** và ** data.table **. – joran
Điều đó không thực sự đúng - data.frames nổi tiếng không hiệu quả, nhưng có những cấu trúc rất hiệu quả trong (cơ sở) R mà bạn nên sử dụng thay vào đó nếu bạn quan tâm đến hiệu quả. –
@SimonUrbanek Vâng, tôi đã nói rất tệ. Tôi chỉ có nghĩa là chính xác những gì bạn nói, các khung dữ liệu có xu hướng không hiệu quả và các gói tôi đề cập thường có thể hữu ích cho những người xử lý dữ liệu lớn. – joran