#r #performance #optimization
#r #Производительность #оптимизация
Вопрос:
Я попытался оптимизировать функцию, которую написал несколько недель назад. Стало лучше, но все еще медленно. Итак, я использовал Rprof()
и обнаружил, split()
что занимает больше всего времени, что по какой-то причине заставляет меня думать, что эта функция может быть намного лучше.
Можно ли это сделать ?!
normDist_V2 <- function(size=1e5, precision=1, ...)
{
data <- rnorm(size)
roundedData <- round(data, precision)
framedData <- data.frame(cbind(data, roundedData))
factoredData <- split(framedData$data, framedData$roundedData)
actualsize <- (size)/10^precision
X <- names(factoredData)
Probability <- sapply(factoredData, length) / actualsize
plot(X, Probability, ...)
}
Текущая скорость:
system.time(normDist_V2(size=1e7, precision = 2)) #11.14 sec
Комментарии:
1. Здравствуйте, мистер. Сампати. Не могли бы вы опубликовать образец данных, чтобы мы могли запускать код как можно ближе к вашей среде, пожалуйста?
Ответ №1:
normDist_V2 <- function(size = 1e5, precision = 1, ...) {
require(data.table)
data <- rnorm(size)
roundedData <- round(data, precision)
framedData <- data.table(data, roundedData)
actualsize <- (size)/10^precision
dt <- framedData[, .N, keyby = roundedData]
X <- dt$roundedData
Probability <- dt$N/actualsize
plot(X, Probability, ...)
}
system.time(normDist_V2(size=1e7, precision = 2)) # 1.26 sec
Комментарии:
1. можете ли вы немного подробнее объяснить, что вы сделали и почему это быстрее (т. Е. Использование
data.table
)?