我有一个矩阵列表。我想将所有行(最后一行除外)都转换为零。我尝试了该lapply
功能,但没有按预期工作。
x <- matrix(3,4,4)
y <- matrix(5,4,5)
z <- list(x,y)
NewZ <- lapply(1:2, function(i) z[[i]][-nrow(z[[i]]), ] <- 0)
lapply 返回给我这个:
> NewZ
[[1]]
[1] 0
[[2]]
[1] 0
我想得到这样的矩阵:
> z[[1]][-nrow(z[[1]]),] <- 0
> z[[1]]
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
[4,] 3 3 3 3
> z[[2]][-nrow(z[[2]]),] <- 0
> z[[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 5 5 5 5 5
我的错误在哪里?有什么想法吗?
你lapply()
就像一个for
循环一样使用。lapply
自己循环遍历列表,无需使用索引:
NewZ <- lapply(z, function(x){
x[-nrow(x),] <- 0
return(x)
})
> NewZ
[[1]]
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
[4,] 3 3 3 3
[[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 5 5 5 5 5
此外,当您更改列表元素的特定部分时lapply
(意味着您<-
在调用中使用运算符),您需要使用return
该元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句