Saya mengalami masalah saat mencoba menggunakan objek besar di R. Misalnya:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for
Saya mengerti bahwa ini terkait dengan kesulitan mendapatkan blok memori yang berdekatan (dari sini ):
Pesan kesalahan yang dimulai tidak dapat mengalokasikan vektor ukuran menunjukkan kegagalan untuk mendapatkan memori, baik karena ukurannya melebihi batas ruang alamat untuk suatu proses atau, lebih mungkin, karena sistem tidak dapat menyediakan memori. Perhatikan bahwa pada build 32-bit mungkin ada cukup memori bebas yang tersedia, tetapi tidak cukup besar ruang alamat yang berdekatan untuk memetakannya.
Bagaimana saya bisa mengatasi ini? Kesulitan utama saya adalah bahwa saya sampai pada titik tertentu dalam skrip saya dan R tidak dapat mengalokasikan 200-300 Mb untuk sebuah objek ... Saya tidak dapat benar-benar mengalokasikan blok karena saya membutuhkan memori untuk pemrosesan lainnya. Ini terjadi bahkan ketika saya dengan rajin menghapus objek yang tidak dibutuhkan.
EDIT: Ya, maaf: Windows XP SP3, 4Gb RAM, R 2.12.0:
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Calloc
danFree
memori, tetapi saya menduga ini bukan apa yang Benjamin lakukan.Jawaban:
Pertimbangkan apakah Anda benar-benar membutuhkan semua data ini secara eksplisit, atau bisakah matriksnya jarang? Ada dukungan yang baik di R (lihat
Matrix
paket untuk misalnya) untuk matriks jarang.Simpan semua proses dan objek lainnya dalam R seminimal mungkin saat Anda perlu membuat objek dengan ukuran ini. Gunakan
gc()
untuk menghapus memori yang tidak digunakan sekarang, atau, lebih baik hanya membuat objek yang Anda butuhkan dalam satu sesi .Jika hal di atas tidak dapat membantu, dapatkan mesin 64-bit dengan RAM sebanyak yang Anda mampu, dan instal 64-bit R.
Jika Anda tidak dapat melakukan itu, ada banyak layanan online untuk komputasi jarak jauh.
Jika Anda tidak dapat melakukannya, alat pemetaan memori seperti paket
ff
(ataubigmemory
seperti yang disebutkan Sascha) akan membantu Anda membangun solusi baru. Dalam pengalaman saya yang terbatasff
adalah paket yang lebih maju, tetapi Anda harus membacaHigh Performance Computing
topik tentang CRAN Task Views.sumber
Untuk pengguna Windows, berikut ini banyak membantu saya untuk memahami beberapa keterbatasan memori:
gc()
untuk melakukan pengumpulan sampah => itu bekerja, saya bisa melihat penggunaan memori turun ke 2 GBSaran tambahan yang berfungsi pada mesin saya:
sumber
gc()
hanya ilusi. Memeriksa Task manager hanyalah operasi windows yang sangat mendasar. Satu-satunya saran yang bisa saya setujui adalah menabung dalam format .Ratagc()
tidak berhasil. Maksud saya R melakukannya secara otomatis, jadi Anda tidak perlu melakukannya secara manual. Lihat di sinigc()
APAKAH berhasil. Anda tidak perlu menggunakannya karena R melakukannya secara internalBerikut ini adalah presentasi tentang topik ini yang mungkin menarik bagi Anda:
http://www.bytemining.com/2010/08/taking-r-to-the-limit-part-ii-large-datasets-in-r/
Saya belum pernah mencoba hal-hal yang dibahas, tetapi
bigmemory
paket itu tampaknya sangat bergunasumber
Cara paling sederhana untuk menghindari batasan ini adalah beralih ke 64 bit R.
sumber
Error: cannot allocate vector of size ... Gb
gantinya (tapi ya, saya punya banyak data).Saya mengalami masalah yang sama, dan saya menggunakan 2 flash drive sebagai 'ReadyBoost'. Kedua drive memberikan tambahan memori 8GB (untuk cache) dan itu memecahkan masalah dan juga meningkatkan kecepatan sistem secara keseluruhan. Untuk menggunakan Readyboost, klik kanan pada drive, pergi ke properti dan pilih 'ReadyBoost' dan pilih tombol radio 'gunakan perangkat ini' dan klik berlaku atau ok untuk mengkonfigurasi.
sumber
Saya mengikuti halaman bantuan dari memor.limit dan menemukan bahwa di komputer saya R secara default dapat menggunakan hingga ~ 1,5 GB RAM dan bahwa pengguna dapat meningkatkan batas ini. Menggunakan kode berikut,
membantu saya untuk menyelesaikan masalah saya.
sumber
Jika Anda menjalankan skrip di lingkungan linux, Anda dapat menggunakan perintah ini:
dan server akan mengalokasikan memori yang diminta untuk Anda (sesuai dengan batas server, tetapi dengan server yang baik - hugefile dapat digunakan)
sumber
server_name
? Saya mengalami inicannot allocate vector size...
dengan mencoba melakukan Document-Term Matrix besar pada AMI dan saya tidak tahu mengapa itu tidak memiliki cukup memori, atau berapa banyak lagi yang harus saya sewa. Terima kasih!Metode simpan / muat yang disebutkan di atas berfungsi untuk saya. Saya tidak yakin bagaimana / jika
gc()
defrag memori tetapi tampaknya ini berfungsi.sumber