Эти функции ни в коем случае не равны.
1. Тип
f1 () выводит вектор, f2 () выводит матрицу.
Как сказал @RicS, первый возвращает вектор, второй возвращает матрицу.
2. Время
f1 () почти в 50 раз быстрее, чем f2 ().
Различия во время выполнения проясняются в большем масштабе:
set.seed(1701)
# Functions
f1 <- function() { sample(rep(1:4, 10000)) }
f2 <- function() { c(replicate(10000, sample(1:4))) }
# Benchmark
microbenchmark::microbenchmark(f1(), f2())
Unit: microseconds
expr min lq mean median uq max neval cld
f1() 671.28 820.6755 983.9417 988.7985 1046.476 2320.425 100 a
f2() 40588.03 43241.0270 48796.0141 45612.0740 54431.890 71117.415 100 b
Мы видим, что f1()
явно быстрее, именно так, как @JosephClarkMcIntyre заявил в комментариях.
Но равны ли они хотя бы в их случайности ?
Давайте проверим это!
3. Случайность
f2 () не является случайным.
Тест ранга Бартельса может проверять ряд числовых чисел на случайность и неслучайность.
> randtests::bartels.rank.test(as.numeric(f1_result$value))
Bartels Ratio Test
data: as.numeric(f1_result$value)
statistic = -1.26, n = 40000, p-value = 0.2077
alternative hypothesis: nonrandomness
Значение p> 0,05, поэтому нулевая гипотеза не была отклонена.
Результат f1()
не является случайным . (это не то же самое, что быть случайным)
> randtests::bartels.rank.test(as.numeric(f2_result$value))
Bartels Ratio Test
data: as.numeric(f2_result$value)
statistic = 50.017, n = 40000, p-value < 2.2e-16
alternative hypothesis: nonrandomness
Значение p <0,05, поэтому нулевая гипотеза была отклонена. <br>
Результат f1()
не является случайным .
Это также очевидно, если вы посмотрите на результат самой функции.
> set.seed(1701)
> replicate(10, sample(1:4))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 4 1 3 3 2 3 3 4 1
[2,] 3 1 2 1 4 3 2 2 3 4
[3,] 4 2 3 2 1 1 4 4 2 2
[4,] 2 3 4 4 2 4 1 1 1 3
Создает матрицу из десяти столбцов, каждый из которых содержит точно числа 1: 4. Это не случайно .