在R中使用栅格图层进行矩阵变换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中使用栅格图层进行矩阵变换相关的知识,希望对你有一定的参考价值。
我使用类型为num的输入的矩阵转换来跟踪一些代码:
> input
1 101.3862407 63.8025351
2 -39.2936491 0.3279252
3 -2.5526003 1.8761791
4 36.1441720 45.3625071
....
和转换矩阵:
transfmatrix <- matrix(c(0.9,-0.1,0.1,0.9),nrow=2)
> transfmatrix
[,1] [,2]
[1,] 0.9 0.1
[2,] -0.1 0.9
然后我可以使用以下方法进行数据转换:
# transformation
result <-input%*%transfmatrix
这工作正常,但我希望“输入”是一个光栅文件。是否可以对栅格图层应用类似的转换?我尝试了以下方法:
library(raster)
r <- raster(ncol=40, nrow=20)
r[] <- rnorm(n=ncell(r))
test1<-stack(r,r*2)
test2 <- test1%*%transfmatrix
但收到错误:
Error in test1 %*% transf.m :
requires numeric/complex matrix/vector arguments
答案
您需要从数据中创建一个2列矩阵,然后乘以2x2矩阵。也许这个:
> z = as.matrix(test1) %*% transf.m
> dim(z)
[1] 800 2
这使得来自test1
的800个单元的800x2矩阵。
如果你想要一个带有值的栅格堆栈,那么,覆盖test1
,执行:
> test1[[1]][]=z[,1]
> test1[[2]][]=z[,2]
以上是关于在R中使用栅格图层进行矩阵变换的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R 中对 SpatialPointsDataFrame 进行子采样