В базе есть функция (как уже упоминалось в комментариях), которая может дать вам то, что вам нужно.
isSymmetric.matrix(a)
# [1] FALSE
Однако, если вы хотите написать свою собственную функцию, то вы должны знать, что вам не нужны петли. Вы можете проверить, являются ли матрица и ее транспонирование одинаковыми (все записи равны), просто используя all
.
new.function <- function(a) {all(a==t(a))}
или all.equal
(менее эффективно).
new.function <- function(a) {all.equal(b, t(b))==1}
Если вы настаиваете на использовании циклов, то вы должны использовать индексы в своем сравнении. Здесь я изменил способ сравнения записей. Я предполагаю, что матрица симметрична; если один из индексов и соответствующая ему запись из транспонированной матрицы (a[i,j]
будет сравниваться с t(a)[i,j]
или a[j,i]
) были неравны, то я выхожу из циклов и возвращаю FALSE
.
new.function <- function(a){
ans = TRUE
for(i in 1:nrow(a)){
for(j in 1:ncol(a)){
if(a[i,j]!=a[j,i]){
ans = FALSE;break}
}}
return(ans)}
Но это совсем не эффективно.