我需要用0填充矩阵距离.我该怎么做?
distances <- matrix(1:25, nrow=5, ncol=5)
apply(distances, c(1, 2), function(x) 0)
Run Code Online (Sandbox Code Playgroud)
Dav*_*urg 40
我会把它放在这里,因为评论中有很多很好的答案
您可以使用旧矩阵的尺寸创建一个全新的矩阵
matrix(0L, nrow = dim(distances)[1], ncol = dim(distances)[2]) # @nrussell
Run Code Online (Sandbox Code Playgroud)
或者,类似地,保存一些击键(因为a matrix是二维的特殊情况array)
array(0L, dim(distances)) # @alexis_laz
Run Code Online (Sandbox Code Playgroud)
或者你可以保留旧矩阵的结构,[]并用零填充它
distances[] <- 0L # @Richard
Run Code Online (Sandbox Code Playgroud)
或者您可以简单地将所有值乘以零
distances*0L # @akrun
Run Code Online (Sandbox Code Playgroud)
或者更通用的解决方案也将采用计数NA情况(因为幂的每个数字总是等于1)
distances^0L - 1L # @docendodiscimus
Run Code Online (Sandbox Code Playgroud)
或者我的一些东西:您可以通过各种方式将矩阵转换为逻辑矩阵,然后添加零,例如:
is.na(distances) + 0L # if you don't have `NA` values in your matrix
Run Code Online (Sandbox Code Playgroud)
要不就
(!distances) + 0L # if you don"t have zeroes in your matrix
Run Code Online (Sandbox Code Playgroud)
如果NA矩阵中可能包含零或值,则row(distances)(或col(distances))不会:
is.na(row(distances)) + 0L
(!row(distances)) + 0L
Run Code Online (Sandbox Code Playgroud)
并且可以强制整个矩阵为NA值,作为生成矩阵1的方法,然后减去1:
is.na(distances + NA) - 1L
Run Code Online (Sandbox Code Playgroud)
或者只是为了好玩
(distances == "Klausos Klausos") + 0L # if you don't have your name as one of the values
Run Code Online (Sandbox Code Playgroud)
另一个(有点尴尬)方法将使用 dim<-
`dim<-`(rep_len(0L, length(distances)), dim(distances))
Run Code Online (Sandbox Code Playgroud)
您只需输入
matrix( rep( 0, len=25), nrow = 5)
Run Code Online (Sandbox Code Playgroud)
这应该按预期工作。
编辑:我犯了一个小错误(请参阅注释),并已纠正它。