Расширить ограничение объема памяти в R - PullRequest
2 голосов
/ 21 апреля 2011

У меня есть программа R, которая объединяет 10 файлов, каждый файл имеет размер 296 МБ, и я увеличил объем памяти до 8 ГБ (размер ОЗУ)

--max-mem-size=8192M

и когда я запустил эту программу, я получил сообщение об ошибке

In type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) :
  Reached total allocation of 7646Mb: see help(memory.size) 

Вот моя R-программа

S1 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_1_400.txt");
S2 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_401_800.txt");
S3 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_801_1200.txt");
S4 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_1201_1600.txt");
S5 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_1601_2000.txt");
S6 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_2001_2400.txt");
S7 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_2401_2800.txt");
S8 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_2801_3200.txt");
S9 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_3201_3600.txt");
S10 <- read.csv2("C:/Sim_Omega3_results/sim_omega3_3601_4000.txt");
options(max.print=154.8E10);
combine_result <- rbind(S1,S2,S3,S4,S5,S6,S7,S8,S9,S10)
write.table(combine_result,file="C:/sim_omega3_1_4000.txt",sep=";",
             row.names=FALSE,col.names=TRUE, quote = FALSE);

Может кто-нибудь, помогите мне с этим

Спасибо

Шрути.

Ответы [ 4 ]

6 голосов
/ 21 апреля 2011

Я предлагаю включить предложения в ?read.csv2:

Использование памяти:

 These functions can use a surprising amount of memory when reading
 large files.  There is extensive discussion in the ‘R Data
 Import/Export’ manual, supplementing the notes here.

 Less memory will be used if ‘colClasses’ is specified as one of
 the six atomic vector classes.  This can be particularly so when
 reading a column that takes many distinct numeric values, as
 storing each distinct value as a character string can take up to
 14 times as much memory as storing it as an integer.

 Using ‘nrows’, even as a mild over-estimate, will help memory
 usage.

 Using ‘comment.char = ""’ will be appreciably faster than the
 ‘read.table’ default.

 ‘read.table’ is not the right tool for reading large matrices,
 especially those with many columns: it is designed to read _data
 frames_ which may have columns of very different classes.  Use
 ‘scan’ instead for matrices.
3 голосов
/ 21 апреля 2011

Распределение памяти требует смежных блоков. Размер файла на диске может не быть хорошим показателем размера объекта при загрузке в R. Вы можете посмотреть на один из этих файлов S с помощью функции:

?object.size

Вот функция, которую я использую, чтобы увидеть, что занимает больше места в R:

getsizes <- function() {z <- sapply(ls(envir=globalenv()), 
                                function(x) object.size(get(x)))
               (tmp <- as.matrix(rev(sort(z))[1:10]))}
1 голос
/ 22 апреля 2011

Если эти файлы в стандартном формате, и вы хотите сделать это в R, тогда зачем читать / писать CSV.Используйте readLines / writeLines:

files_in <- file.path("C:/Sim_Omega3_results",c(
    "sim_omega3_1_400.txt",
    "sim_omega3_401_800.txt",
    "sim_omega3_801_1200.txt",
    "sim_omega3_1201_1600.txt",
    "sim_omega3_1601_2000.txt",
    "sim_omega3_2001_2400.txt",
    "sim_omega3_2401_2800.txt",
    "sim_omega3_2801_3200.txt",
    "sim_omega3_3201_3600.txt",
    "sim_omega3_3601_4000.txt"))


file.copy(files_in[1], out_file_name <- "C:/sim_omega3_1_4000.txt")
file_out <- file(out_file_name, "at")
for (file_in in files_in[-1]) {
    x <- readLines(file_in)
    writeLines(x[-1], file_out)
}
close(file_out)
1 голос
/ 22 апреля 2011

Если вы remove(S1,S2,S3,S4,S5,S6,S7,S8,S9,S10), затем gc() после вычисления comb_result, вы можете освободить достаточно памяти. Я также обнаружил, что запуск его через RScript, по-видимому, позволяет получить доступ к большему объему памяти, чем через графический интерфейс, если вы работаете в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...