因此,在生成一些虚假数据来回答地图问题的过程中,我发现自己编写了以下内容:

# 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/

10-12 17:54