Создание симметричной матрицы в R
У меня есть matrix в R, которая должна быть симметричной, однако из-за точности машины matrix никогда не симметрична (значения отличаются примерно на 10 ^ -16). Поскольку я знаю, что matrix симметрична, я делаю это до сих пор, чтобы обойти проблему:
s.diag = diag(s) s[lower.tri(s,diag=T)] = 0 s = s + t(s) + diag(s.diag,S)
Есть ли лучшая одна строка для этого?
- Включите пространство для отсутствия уровня фактора, используемого для эстетики заливки в geom_boxplot
- Возвращать временные frameworks подмножества данных в другие временные frameworks?
- Как я могу построить с двумя разными осями y?
- Метод для извлечения соответствия stat_smooth
- Измените пустые ячейки на «NA»
- Создание динамического количества элементов ввода с помощью R / Shiny
- Получение состояния переменных после ошибки в R
- Построение нескольких временных рядов на одном и том же участке с использованием ggplot ()
- Добавление столбца между двумя столбцами в файле data.frame
- Функция R не возвращает значения
- Создайте порядковый номер (счетчик) для строк внутри каждой группы данных (дубликат)
- Подзаголовок вне границ - общее определение и решение?
- двухсторонний график плотности в сочетании с односторонним графиком плотности с выбранными областями в r
Действительно ли обходной путь необходим, если значения только отличаются друг от друга?
Кто-то указал, что мой предыдущий ответ был неправильным. Мне нравятся некоторые из них лучше, но поскольку я не могу удалить этот (принятый пользователем, который ушел), вот еще одно решение, использующее пакет micEcon
:
symMatrix(s[upper.tri(s, TRUE)], nrow=nrow(s), byrow=TRUE)
s<-matrix(1:25,5) s[lower.tri(s)] = t(s)[lower.tri(s)]
Вы можете заставить матрицу быть симметричной с помощью forceSymmetric
функции в пакете Matrix
в R:
library(Matrix) x<-Matrix(rnorm(9), 3) > x 3 x 3 Matrix of class "dgeMatrix" [,1] [,2] [,3] [1,] -1.3484514 -0.4460452 -0.2828216 [2,] 0.7076883 -1.0411563 0.4324291 [3,] -0.4108909 -0.3292247 -0.3076071 A <- forceSymmetric(x) > A 3 x 3 Matrix of class "dsyMatrix" [,1] [,2] [,3] [1,] -1.3484514 -0.4460452 -0.2828216 [2,] -0.4460452 -1.0411563 0.4324291 [3,] -0.2828216 0.4324291 -0.3076071
s<-matrix(1:25,5) pmean <- function(x,y) (x+y)/2 s[] <- pmean(s, matrix(s, nrow(s), byrow=TRUE)) s #------- [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 4 7 10 13 16 [3,] 7 10 13 16 19 [4,] 10 13 16 19 22 [5,] 13 16 19 22 25