Примечание: c()
- это часто используемая функция в R, поэтому использование c
в качестве имени переменной не является хорошей практикой, вместо этого я использую c_
.
При умножении матриц на число столбцов в первой матрице должно совпадать с количеством строк во второй. В части as.matrix(x) %*% as.matrix(c)
в вашем коде первая матрица имеет один столбец, а вторая - 7 строк. Вот почему вы получаете ошибку.
Умножение транспонированной строки dat
сначала на c
, а затем строка исправляет это.
apply(dat2, 1, function(x) sqrt(t(as.matrix(x)) %*% as.matrix(c_) %*% (as.matrix(x))))
Или делая функцию более явной в также работает матрица, которую вы хотите создать из строки:
apply(dat, 1, function(x) sqrt(matrix(x, 1) %*% c_ %*% t(matrix(x, 1))))
Оба решения дают одинаковые результаты.