Tiếp tục câu trả lời của Joshua, có sự khắc phục nếu bạn muốn tăng tốc hoạt động này. Nó được lấy cảm hứng từ hệ tư tưởng Map-reduce và tôi đã thực hiện một POC trên một tập dữ liệu mẫu trong khi quay trở lại.
Tôi đã sử dụng thư viện tuyết rơi- Tôi tin rằng bạn cũng có thể làm việc với doMC.
# On my phone, please pardon typos/bugs
test <- data.frame(x=1:1000000, y=rep(c(1:20), 500))
testList = list()
testList[[1]] <- test[c(1:250000),]
testList[[2]] <- test[c(250001:500000),]
testList[[3]] <- test[c(500001:750000),]
testList[[4]] <- test[c(750001:1000000),]
# Write a function for the above - Need to find optimum number of splits
sfInit(parallel = TRUE, cpus=4)
sfCluster(plyr)
meanList = sfClusterSpplyLB(testList, function(x) ddply(test, "y", mean))
sfStop()
aggregate(meanList, by=list(y), FUN=mean)
này sức giúp bạn, cho rằng chúng ta đang làm thường xuyên chia kết hợp một cách phân tán. Điều này làm việc cho các phương tiện khi kích thước của các phân chia là như nhau, nó hoạt động cho tổng, min/max, đếm vv là OK nhưng có một số hoạt động mà chúng tôi không thể sử dụng này cho.
Tùy thuộc vào các phép tính thực tế bạn đang thực hiện, gói 'data.table' thực sự có thể tăng tốc chúng. Đối với tất cả các đặc tính của nó, việc thực thi 'split-apply-combined' trong gói 'plyr' thực sự khá chậm, trong khi' data.table' là thiết bị đầu tiên và được thiết kế trước hết cho tốc độ. (Nếu bạn bị hấp dẫn, chỉ cần tìm kiếm SO cho một cái gì đó như '[r] [data.table] plyr' để có được rất nhiều điểm khởi đầu có thể). –
Cảm ơn bạn Josh, tôi sẽ xem xét. – Alex