我需要用0填充矩阵距离。我该怎么做?
distances <- matrix(1:25, nrow=5, ncol=5)
apply(distances, c(1, 2), function(x) 0)
答案 0 :(得分:38)
我只是把它放在这里,因为评论中有很多很好的答案
您可以使用旧矩阵的尺寸
创建一个全新的矩阵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 :(得分:4)
您只需输入
即可matrix( rep( 0, len=25), nrow = 5)
这应该是希望的。
修改:我犯了一个小错误(请参阅评论)并对其进行了更正。