ฉันพบปัญหาในการพยายามใช้วัตถุขนาดใหญ่ใน R ตัวอย่างเช่น:
> 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
ฉันเข้าใจว่าสิ่งนี้เกี่ยวข้องกับความยากลำบากในการได้รับบล็อกหน่วยความจำต่อเนื่อง (จากที่นี่ ):
ข้อความแสดงข้อผิดพลาดที่เริ่มต้นไม่สามารถจัดสรรเวกเตอร์ที่มีขนาดระบุความล้มเหลวในการรับหน่วยความจำเนื่องจากขนาดเกินขีด จำกัด พื้นที่ที่อยู่สำหรับกระบวนการหรือมีแนวโน้มมากขึ้นเนื่องจากระบบไม่สามารถให้หน่วยความจำได้ โปรดทราบว่าในรุ่น 32 บิตอาจมีหน่วยความจำว่างเพียงพอ แต่ไม่มีบล็อกที่อยู่ติดต่อกันขนาดใหญ่พอที่จะแมป
ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ปัญหาหลักของฉันคือฉันไปถึงจุดหนึ่งในสคริปต์ของฉันและ R ไม่สามารถจัดสรร 200-300 Mb สำหรับวัตถุ ... ฉันไม่สามารถจัดสรรบล็อกได้ล่วงหน้าเพราะฉันต้องการหน่วยความจำสำหรับการประมวลผลอื่น ๆ สิ่งนี้เกิดขึ้นแม้เมื่อฉันเอาวัตถุที่ไม่จำเป็นออกไปอย่างไม่ตั้งใจ
แก้ไข: ใช่ขอโทษ: 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
และFree
หน่วยความจำ แต่ฉันสงสัยว่านี่ไม่ใช่สิ่งที่เบนจามินจะทำ