3482
правки
Изменения
м
→Выводы
Если искомая функция принадлежит какому-то пакету, то этот пакет должен быть предварительно загружен.
С учётом выявленных «узких» мест нашей функции и проанализировав исходный код функций, мы можем оптимизировать нашу исходную функцию для достижения максимальной производительности. Наш вариант оптимизированной функции будет выглядеть следюущим образом:
<syntaxhighlight lang="rsplus">
desc <- function(x) {
n <- length(x)
mean <- sum(x) / n
sd <- sqrt(sum((x - mean)^2) / (n - 1))
min <- min(x)
max <- max(x)
half <- (n + 1L) %/% 2L
if (n %% 2L == 1L)
median <- .Internal(psort(x, half))[half]
else
median <- sum(.Internal(psort(x, c(half, half + 1)))[c(half, half + 1)]) / 2L
return(c(n, mean, median, sd, min, max))
}
</syntaxhighlight>
Вместо функций {{Inline-code|median()|lang="rsplus"}} и {{Inline-code|sd()|lang="rsplus"}} мы использовали общеизвестные формулы. А для расчёта медианы была взята часть оригинальной функции {{Inline-code|median.default|lang="rsplus"}}, в которой вызов функций {{Inline-code|sort()|lang="rsplus"}} был заменён на более быстрый вызов {{Inlince-code|.internal(psort)|lang="rsplus}}.
== Примечания ==