R:如何从多个栅格创建概率栅格

问题描述

在 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))