Эффективность использования памяти для R-скрипта с использованием Package Physical Activity

У меня есть относительно короткий скрипт, который берет большой фрейм данных (2373142 строки x 21 столбец) числовых и строковых полей и разбивает его на список dfs на основе значений одного из столбцов. Длина списка, использующего этот набор данных, в конечном итоге составляет 92, а затем он запускается функцией из пакета Physical Activity с использованием lapply. Скрипт отлично работает с небольшими наборами данных, но с такими большими он использует память по максимуму. Я даже пытался разбить его и запускать все меньшие и меньшие списки, но он достигает максимума даже с подмножеством из двух элементов исходного списка. Я должен добавить, что у моего компьютера 16 ГБ оперативной памяти, ко всем из которых у R есть доступ.

Я не знаю, как сделать его более эффективным, поскольку я не использую никаких циклов, но я надеялся, что у кого-то, кто более разбирается в R, чем у меня, есть некоторые предложения по эффективности. Я беспокоюсь, что проблема связана с функцией пакета WearMarking, но я не уверен. Мои данные конфиденциальны, поэтому, к сожалению, я не могу предоставить образец. Мои извинения, поскольку я знаю, что это далеко от идеала и является ограничительным, но любая помощь будет принята с благодарностью.

allData <- read.csv("myData.csv", header = TRUE) # Loading data

chngActivity <- allData[,c("activity")] #Creating a duplicate of activityIntensity column
chngActivity[chngActivity == -2] <- 0
allData <- cbind(allData, chngActivity)#Binding the new column to the old df

corTime <- transform(allData, dateTime=strptime(allData$dateTime, "%m/%d/%y %H:%M"))# Making sure the dateTime is set as a date
corTimeLst <- split(corTime, corTime$identifier) #Splitting into a list of dfs by identifier
rm(allData, corTime)

allChoi <- function(f) {
  choi_test <- wearingMarking(dataset = f, #Running the choi
                          frame = 90,        #The current parameters are set to
                          perMinuteCts = 1,  # a one minute epoch with the new
                          TS = "dateTime",   # non-wear column called "wearing"
                          cts = "chngActivity",
                          streamFrame = NULL,
                          allowanceFrame= 3,
                          newcolname = "wearing")
  return(choi_test)
}


choiRun <- lapply(corTimeLst, allChoi)#applying the function to each participant on the list
choiFlat <- ldply(choiRun, data.frame)#Flattening the list into a df

person Misc    schedule 29.01.2014    source источник
comment
что такое два списка? почему ты пишешь поверх choiRun?   -  person Andrew Cassidy    schedule 29.01.2014
comment
Ой, извините, это я тестировал меньшую подгруппу и забыл ее вынуть. Только что сделал поправку.   -  person Misc    schedule 29.01.2014
comment
возможный дубликат Обрезка огромного (3,5 ГБ) файл csv для чтения в R   -  person krlmlr    schedule 29.01.2014
comment
Особенно обратите внимание на ff и bigmemory, а также cran.r-project.org/web/ views/HighPerformanceComputing.html (как показано в stackoverflow.com/q/11055502/946850).   -  person krlmlr    schedule 30.01.2014
comment
Хорошо, спасибо @krlmlr. Я использовал ff раньше с фреймами данных. Я постараюсь использовать его со своими списками.   -  person Misc    schedule 30.01.2014
comment
@Misc: я бы попробовал сохранить все данные как ffdf, а затем запустить на них ddply.   -  person krlmlr    schedule 30.01.2014
comment
Но прежде чем запускать тяжелую технику, избавьтесь от corTime. Использование второй переменной для фрейма больших данных увеличивает требования к памяти. Почему бы вам просто не написать allData$dateTime <- ..., то же самое для вызова cbind выше? Помните, что фрейм данных внутри представляет собой список векторов-столбцов. -- Также проверьте функцию lsos().   -  person krlmlr    schedule 30.01.2014
comment
Отлично, спасибо. Сначала я попробую предложения по выравниванию потоков, а затем перейду к ff.   -  person Misc    schedule 30.01.2014
comment
@krlmlr большое спасибо, оптимизация сработала, и мне даже не понадобился ff!   -  person Misc    schedule 30.01.2014