У меня есть относительно короткий скрипт, который берет большой фрейм данных (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
ff
иbigmemory
, а также cran.r-project.org/web/ views/HighPerformanceComputing.html (как показано в stackoverflow.com/q/11055502/946850). - person krlmlr   schedule 30.01.2014ffdf
, а затем запустить на нихddply
. - person krlmlr   schedule 30.01.2014corTime
. Использование второй переменной для фрейма больших данных увеличивает требования к памяти. Почему бы вам просто не написатьallData$dateTime <- ...
, то же самое для вызоваcbind
выше? Помните, что фрейм данных внутри представляет собой список векторов-столбцов. -- Также проверьте функциюlsos()
. - person krlmlr   schedule 30.01.2014