如何用零 (0) 填充矩阵

How to fill a matrix with zero (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))

您只需输入

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

这应该可以正常工作。

编辑: 我犯了一个小错误(见评论)并已更正。