Как заполнить матрицу нулем (0)

Мне нужно заполнить расстояния матрицы 0. Как я могу это сделать?

distances <- matrix(1:25, nrow=5, ncol=5)
apply(distances, c(1, 2), function(x) 0)

2 ответов


я просто поставлю его здесь, так как есть куча хороших ответов в комментариях

вы можете создать совершенно новую матрицу, используя размеры вашей старой матрицы

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

или более общее решение, которое будет принимать в count 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 значения, как способ получения матрицы 1s, затем вычесть 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))

вы можете просто ввести

matrix( rep( 0, len=25), nrow = 5)

Это должно работать по желанию.

Edit: Я сделал небольшую ошибку (см. комментарий) и исправили ее.