Мне нужно заполнить матричные расстояния 0. Как я могу это сделать?Как заполнить матрицу нулем (0)
distances <- matrix(1:25, nrow=5, ncol=5)
apply(distances, c(1, 2), function(x) 0)
Мне нужно заполнить матричные расстояния 0. Как я могу это сделать?Как заполнить матрицу нулем (0)
distances <- matrix(1:25, nrow=5, ncol=5)
apply(distances, c(1, 2), function(x) 0)
Я просто поставить его здесь, поскольку есть куча хороших ответов в комментариях
Вы можете создать совершенно новую матрицу, используя размеры вашей старой матрицы
matrix(0L, nrow = dim(distances)[1], ncol = dim(distances)[2]) # @nrussell
Или , аналогичным образом, чтобы сэкономить несколько нажатий клавиш (поскольку matrix
является частным случаем двумерных array
)
array(0L, dim(distances)) # @alexis_laz
Или вы могли бы сохранить структуру вашей старой матрицы с помощью []
и заполнить его нулями
distances[] <- 0L # @Richard
Или вы можете просто умножить все значения на ноль
distances*0L # @akrun
Или более общее решение будет, который будет принимать также NA
случаев (поскольку каждое число в нулевом состоянии всегда равно 1)
distances^0L - 1L # @docendodiscimus
Или некоторые из моих вещей: Вы можете преобразовать матрицу в логическую матрицу через различными способами, а затем добавить нули, например:
is.na(distances) + 0L # if you don't have `NA` values in your matrix
Или просто
(!distances) + 0L # if you don"t have zeroes in your matrix
Если вы, возможно, ноль или NA
значение в матрице, row(distances)
(или col(distances)
) не будет:
is.na(row(distances)) + 0L
(!row(distances)) + 0L
И один может заставить всю матрицу быть NA
значения, как способ получения матрицы 1
-х, а затем вычесть 1
:
is.na(distances + NA) - 1L
Или просто для удовольствия
(distances == "Klausos Klausos") + 0L # if you don't have your name as one of the values
Другой (немного неудобно метод) будет использовать dim<-
`dim<-`(rep_len(0L, length(distances)), dim(distances))
Если вы собираетесь собирать всевозможные способы, вы также можете делать« дистанции^0L - 1L'. Обратите внимание, что это также преобразует NA, если присутствует, в 0s, в отличие от 'distance * 0L'. –
@docendodiscimus вы можете вносить свой вклад, это ответ на вики. –
Вы можете просто ввести
matrix(rep(0, len=25), nrow = 5)
Это должно работать по желанию.
Редактировать: Я сделал небольшую ошибку (см. Комментарий) и исправил ее.
Вы правы. Я изменил свой ответ соответственно. – bonnaix
Это код, который я использую для неквадратной матрицы! Пример для матрицы 4 х 6
matrix(rep(0,4*6),nrow=4,ncol=6)
'rep' не нужно. 'matrix (0, nrow = 4, ncol = 6)' отлично работает. (Точно так же, как в верхнем комментарии к вопросу или в первой строке кода принятого ответа.) R будет по мере необходимости утилизировать 0. – Gregor
'матрица (0, nrow = 5, Ncol = 5)' ' – nrussell
расстояния [] <- 0L' –
или' расстояния * 0 ' – akrun