Nếu tôi có một khung dữ liệu như vậy:Tốc độ lên máy tính trung bình hàng khôn ngoan của mỗi 3-tuple của cột
df = data.frame(matrix(rnorm(100), 5000, 100))
tôi có thể sử dụng chức năng sau đây để nhận được tất cả sự kết hợp của hàng trung vị ba hạn -wise:
median_df = t(apply(df, 1, combn, 3, median))
Vấn đề là, chức năng này sẽ mất vài giờ để chạy. Thủ phạm là trung bình(), mất khoảng 10 lần để chạy so với max() hoặc min().
Làm cách nào để tăng tốc chức năng này, có thể bằng cách viết phiên bản trung bình nhanh hơn() hoặc làm việc với dữ liệu gốc khác nhau?
Cập nhật:
Nếu tôi chạy đoạn mã trên nhưng chỉ cho df [, 1: 10] như vậy:
median_df = t(apply(df[,1:10], 1, combn, 3, median))
mất 29 giây
fastMedian_df = t(apply(df[,1:10], 1, combn, 3, fastMedian))
từ gói ccaPP mất 6,5 giây
max_df = t(apply(df[,1:10], 1, combn, 3, max))
mất 2,5 giây
Vì vậy, chúng tôi thấy sự cải thiện đáng kể với fastMedian(). Chúng ta có thể làm tốt hơn không?
Trong khi 'trung vị' có thể gây ra một số vấn đề so với' max' và 'min', tôi nghĩ vấn đề thực sự với' combn'. Ví dụ, một hàng đơn ('system.time (combn (df [1,], 3))') mất ~ 10 giây trên máy tính của tôi. – nrussell
@nrussell trong khi combnPrim là một thực hiện nhanh hơn nhiều combn(), tôi không thể có được combnPrim để làm việc trong trường hợp này, trả về lỗi: Lỗi trong if (simplify) {: argument không thể hiểu là logic –
Trong mọi trường hợp, combn() mất ít hơn 10% thời gian trung bình() cần để chạy trong chức năng này –