Есть ли в R более быстрый способ создания больших данных без циклов? - PullRequest
0 голосов
/ 12 апреля 2020

Ниже приведен пример того, что я сейчас делаю, и это довольно медленно. Я полагаю, что должно быть что-то более эффективное, чем это, поскольку для запуска требуется около 95 секунд.

df <- data.frame(matrix(vector(), 1000, 1000))     
for (i in (1:1000)) {
        for (j in (i:1000)) {
                df[i, j]  <-   i *1000 + j  
                df[j, i]  <-   df[i, j]  

        }
}

Также обратите внимание, что i * 1000 + j только для иллюстрации. Я делаю что-то еще там, но это расчет зависит от получения всех пар за 1: 1000. Спасибо.

1 Ответ

3 голосов
/ 12 апреля 2020

Рассмотрим outer с переназначением нижнего треугольника возврата матрицы.

out_mat <- outer(1:1E3, 1:1E3, function(i,j) i * 1E3 + j)
out_mat[lower.tri(out_mat)] <- t(out_mat)[lower.tri(t(out_mat))]
df2 <- data.frame(out_mat)

Результаты показывают точный эквивалент df , сгенерированного из for l oop:

identical(df, df2)
# [1] TRUE

Однако вышеприведенное зависит от вашей фактической * * * * * * Вычисление вне простого арифметического c, вызов outer может не работать в зависимости от размеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...