У меня есть данные опроса в SPSS
и Stata
, размер ~730 MB
. Каждая из этих программ также занимает примерно столько места, которое вы ожидаете (~800MB
) в памяти, если я буду работать с этими данными.
Я пытался подобрать R
и попытался загрузить эти данные в R
. Независимо от того, какой метод я пытаюсь (read.dta
из файла Stata
, fread
из файла csv
, read.spss
из файла SPSS
), объект R
(измеренный с помощью object.size()
) между 2.6 to 3.1 GB
по размеру. Если я сохраню объект в файле R
, который меньше, чем 100 MB
, но при загрузке он имеет тот же размер, что и раньше.
Любые попытки анализа данных с использованием пакета опроса, особенно если я пытаюсь и subset
данные, занимают значительно больше, чем эквивалентная команда в Stata
.
Например, у меня есть переменная размера домашнего хозяйства 'hhpers'
в моих данных 'hh'
, взвешенная переменной 'hhwt'
, подмножество 'htype'
R-код:
require(survey)
sv.design <- svydesign(ids = ~0,data = hh, weights = hh$hhwt)
rm(hh)
system.time(svymean(~hhpers,sv.design[which
(sv.design$variables$htype=="rural"),]))
подталкивает память, используемую R до 6 ГБ, и занимает очень много времени -
пользовательская система 3.70 1.75 144.11
Эквивалентная операция в statap >
svy: mean hhpers if htype == 1
завершается почти мгновенно, давая мне тот же результат.
Почему существует такое огромное различие между использованием памяти (как объектом, так и функцией) и временем между R
и Stata
?
Я могу что-то сделать, чтобы оптимизировать данные и как R
работает с ним?
ETA: Моя машина работает с 64-разрядной версией Windows 8.1, и я запускаю R без загрузки других программ. По крайней мере, среда не отличается для R, чем для Stata.
После некоторого копания, я ожидаю, что причиной этого является ограниченное количество типов данных R. Все мои данные хранятся как int, что занимает 4 байта на элемент. В данных опроса каждый ответ категорически кодируется и обычно требует хранения только одного байта, который хранит stata с использованием типа данных байта, и R-хранилища, использующие тип данных "int", что приводит к некоторой значительной неэффективности в крупных обследованиях.