На самом деле, вопреки Дирку, я считаю, что вы должны знать о векторизации в R как можно скорее. Структура цикла, которую вы пытаетесь реализовать, далека от оптимальной и фактически избыточна. Использование цикла for должно выполняться только в очень специфических случаях. Проверьте обсуждение в этот вопрос . Посмотрите на файлы справки вспомогательных функций, таких как diag()
, combn()
, prod()
и apply()
.
Их легко объединить, чтобы сделать то, что вы хотите:
x <-matrix(1:400,ncol=20)
Diag <- diag(x)
Id <- combn(1:length(Diag),2)
Diag.prod <- apply(matrix(Diag[Id],ncol=2),1,prod)
Max.Diag.prod <- max(Diag.prod)
Редактировать: Вы используете фрейм данных, но вы можете использовать as.matrix(x)
, чтобы легко преобразовать это в матрицу.