【发布时间】:2016-11-14 10:54:48
【问题描述】:
我很难在 lapply 循环中填充矩阵。
在我的数据中,我有一个包含 135 个地理空间点的列表。在 lapply 循环中,我根据这些站点坐标的 3 个不同半径内的景观计算各种指标。我想做的是循环遍历 135 个站点和 3 个半径的每个组合,然后用 (site,radius,metric1,metric2,metric3) 填充我的空白、预先准备好的矩阵的每一行。
我创建了一个简单的脚本来复制我遇到的问题。如果我可以像在here 中那样应用do.call(rbind, absdf) 命令,那么我还没有弄清楚如何......
# Generate empty matrix:
mymatrix <- matrix(,nrow=18, ncol=5)
# A vector with length of x (in my data this is the list of 135 sites):
a <- 1:6
#These sets will represent my metrics
b <- rnorm(6, 5, 10)
c <- rnorm(6, 100, 20)
d <- rnorm(6, 20, 20)
# Radius vector:
rad <- c(100,200,300)
# The loop: lapply for site within lapply for radius
lapply(1:3,function(r){
lapply(1:6,function(x){
row.number <- (r-1)*6+x
tmpvector <- c(a[x], b[x], c[x], d[x], rad[r])
mymatrix[row.number,] <- tmpvector
})
})
View(mymatrix)
使用现在编写的代码,生成的矩阵仍然是空白的。
如果我把这个简单的例子写成一个 for 循环
mymatrix <- matrix(,nrow=18, ncol=5)
a <- 1:6
b <- rnorm(6, 5, 10)
c <- rnorm(6, 100, 20)
d <- rnorm(6, 20, 20)
rad <- c(100,200,300)
for (r in 1:3) {
for (x in 1:6) {
row.number <- (r-1)*6+x
tmpvector <- c(a[x], b[x], c[x], d[x], rad[r])
mymatrix[row.number,] <- tmpvector
}
}
View(mymatrix)
然后矩阵会按照我的预期填充值。如果我犯了一个简单的错误,我深表歉意:我对这些循环很陌生!
注意,我也愿意创建这些数据的连续列表,然后我可以将其转换为更有用的格式!
【问题讨论】: