因此,在生成一些虚假数据来回答地图问题的过程中,我发现自己编写了以下内容:
# Generate some fake data
lat <- seq(-90, 90, by = 5)
lon <- seq(-180, 180, by = 10)
phi <- matrix(0, nrow = length(lat), ncol = length(lon))
i <- 1
for (l1 in lat) {
j <- 1
for (l2 in lon) {
phi[i, j] <- (sin(pi * l1 / 180) * cos(pi * l2 / 180))^2
j <- j+1
}
i <- i+1
}
phi <- 1500*phi + 4500 # scale it properly
现在显然这两个中央for循环不如我所愿。看来我应该能够得到
mapply
或类似的东西来完成这项工作,但可悲的是,它返回一个列表,并且并没有真正做到我想要的。其他应用似乎也做不正确的事情。我在这里想念什么?
最佳答案
您应该尝试使用矩阵代数。无需使用apply系列的任何功能:
lat <- seq(-90, 90, by = 5)
lon <- seq(-180, 180, by = 10)
1500 * tcrossprod(sin(pi * lat / 180), cos(pi * lon / 180))^2 + 4500
关于r - 避免在R中使用多个for循环来计算矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35598590/