2015-01-19 2 views

ответ

24

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

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

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)) 
+1

Если вы собираетесь собирать всевозможные способы, вы также можете делать« дистанции^0L - 1L'. Обратите внимание, что это также преобразует NA, если присутствует, в 0s, в отличие от 'distance * 0L'. –

+1

@docendodiscimus вы можете вносить свой вклад, это ответ на вики. –

1

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

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

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

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

+0

Вы правы. Я изменил свой ответ соответственно. – bonnaix

0

Это код, который я использую для неквадратной матрицы! Пример для матрицы 4 х 6

matrix(rep(0,4*6),nrow=4,ncol=6) 
+1

'rep' не нужно. 'matrix (0, nrow = 4, ncol = 6)' отлично работает. (Точно так же, как в верхнем комментарии к вопросу или в первой строке кода принятого ответа.) R будет по мере необходимости утилизировать 0. – Gregor

Смежные вопросы