问题描述
在 R 中,我需要创建一个 raster
概率 的 4 个栅格(与道路、斜坡、草覆盖和树木覆盖的距离)。对于这些中的每一个,我都创建了一个公式来计算重量。不幸的是,我无法共享数据。下面的这个功能是我迄今为止尝试做的,但它还没有工作。它给出了错误:Non-numeric argument to mathematical function
。有什么推荐吗?
probabilities_raster <- function(tc,gc,road,slp){
# Create structure to hold data
propxy_raster <- raster(ncol=100,nrow=100)
ncell(propxy_raster)
treecover <- (dnorm(tc,mean=0.7,sd=0.1))/(dnorm(0.7,sd=0.1)) # not working
grasscover <- (dnorm(gc,mean=0.3,sd=0.1))/(dnorm(0.3,sd=0.1)) # not working
road <- pnorm(-2+4*road) # not working
slope <- exp(-10*slp) # this one works
# Calculate weight
weight <- treecover * grasscover * road * slope
propxy_raster <- weight
return(propxy_raster)
}
raster_1 <- probabilities_raster(tc=raster_treecover,gc=raster_grasscover,road=raster_road,slp=
raster_slope)
解决方法
在询问 R 问题时,请包括一个最小的、独立的可重现示例。您需要包含运行的代码。您不能共享数据并不是问题——即使可以,您也不应该这样做。而是使用一些由代码生成的示例数据或 R 附带的文件。请参阅光栅包中的示例。例如以 s 开头
minimal 也很重要,因为您的问题应该是:
“如何将 dnorm
与 RasterLayer 一起使用?”
library(raster)
tc <- raster()
values(tc) <- runif(ncell(tc))
x <- dnorm(tc,mean=0.7,sd=0.1)
#Error in dnorm(tc,mean = 0.7,sd = 0.1) :
# Non-numeric argument to mathematical function
我认为你正在寻找的是
x <- calc(tc,function(i) dnorm(i,0.7,0.3))