@ У Гэвина Симпсона очень красивое и элегантное решение!Но есть одна оговорка:
Тип матрицы останется прежним или будет расширен.В основном вы не заметите, но учтите следующее:
a <- matrix( sample(letters, 4), 2, 2)
rank.a <- a
rank.a[] <- rank(a)
typeof(rank.a) # character
Поскольку матрица была символом, с которого нужно начинать, значения rank
(которые являются двойными) были преобразованы в строки символов!
Вот более безопасный способ, который просто копирует все атрибуты:
a <- matrix( sample(letters, 4), 2, 2)
rank.a <- rank(a)
attributes(rank.a) <- attributes(a)
typeof(rank.a) # double
Или, как однострочный, используя structure
, чтобы скопировать только соответствующие атрибуты (но больше печатать):
a <- matrix( sample(letters, 4), 2, 2)
rank.a <- structure(rank(a), dim=dim(a), dimnames=dimnames(a))
Конечно, dimnames
можно было бы опустить в данном конкретном случае.