use*_*378 1 replace r lapply diagonal
我想替换列表中包含的矩阵的对角线元素。
w <- matrix(rnorm(25), 5)
t <- matrix(seq(1, 25, 1), 5)
s <- list(w, t)
Run Code Online (Sandbox Code Playgroud)
如果我尝试这个,它会起作用。
diag(s[[1]]) <- rep(0, 5)
diag(s[[2]]) <- rep(0,5)
Run Code Online (Sandbox Code Playgroud)
但如果我尝试这样做,我会收到一条错误消息。
lapply(1:2, function(i){diag(s[[i]]) <- rep(0, nrow(s[[i]]))})
Run Code Online (Sandbox Code Playgroud)
所以有两件事是错误的。首先是“lapply-loop”。第二个是nrow(s[[i]])。但为什么。我不明白这一点。谢谢。
这应该有效
lapply(s, function(x) { diag(x) <- 0; x})
Run Code Online (Sandbox Code Playgroud)
这相当于
lapply(s, function(x) {
diag(x) <- 0
return(x)})
Run Code Online (Sandbox Code Playgroud)
请注意,这是有效的,因为匿名函数有一个要返回的对象,它在后面;或中明确指出return(x)
| 归档时间: |
|
| 查看次数: |
5118 次 |
| 最近记录: |