R:从一个函数创建一个im对象作为我的模型的协变量
我想从一个函数创建一个im对象,该函数根据相对于固定线的距离指定一个值,即,如果点远离该线,则其值接近零,如果该点靠近该线,则其值相反。我创建了以下函数:R:从一个函数创建一个im对象作为我的模型的协变量,r,spatstat,R,Spatstat,我想从一个函数创建一个im对象,该函数根据相对于固定线的距离指定一个值,即,如果点远离该线,则其值接近零,如果该点靠近该线,则其值相反。我创建了以下函数: library(spatstat) W <- owin(xrange = c(-0.5, 4.5), yrange = c(-0.5, 3.5)) covValue <- function(x, y) { # defining the segment AB b <- W$yrange[2] + 2 A <
library(spatstat)
W <- owin(xrange = c(-0.5, 4.5), yrange = c(-0.5, 3.5))
covValue <- function(x, y) {
# defining the segment AB
b <- W$yrange[2] + 2
A <- c(W$xrange[1], b)
I <- c(W$xrange[2], W$yrange[2])
m <- (I[2] - A[2]) / (I[1] - A[1])
B <- c((W$yrange[1] - b) / m, 0)
C <- c(x, y)
C <- c(4.5, 3.5)
x1 <- A[1]
y1 <- A[2]
x2 <- B[1]
y2 <- B[2]
x3 <- C[1]
y3 <- C[2]
# calculating the orthogonal point D that belongs to the segment AB with respect to a given point C = (x,y) inside the observation window
px <- x2 - x1
py <- y2 - y1
dAB <- px * px + py * py
u <- ((x3 - x1) * px + (y3 - y1) * py) / dAB
xr <- x1 + u * px
yr <- y1 + u * py
D <- c(xr, yr)
# t<-((C[1]-A[1])*(B[1]-A[1])+(C[2]-A[2])*(B[2]-A[2]))/((B[1]-A[1])^2+(B[2]-A[2])^2)
# Dx=A[1]+t*(B[1]-A[1])
# Dy=A[2]+t*(B[2]-A[2])
# if the point C is away from the segment AB, this has less value
dist <- sqrt((C[1] - D[1]) ^ 2 + (C[2] - D[2]) ^ 2)
value <- 1 / exp(dist)
return(value)
}
库(spatstat)
函数必须进行向量化,以便对于长度为n的向量x和y,它必须返回长度为n的向量。如果你只需要到线段的距离,你可以创建一个psp对象并使用distfun。现在在机场,所以我不能填写细节 我不熟悉这个包,但可以尝试这样的方法:imagen另外,我看不出函数参数x
和y
在哪里被使用…@Samuel:我正在使用spatat包的书中的这个示例作为模板:f A
imagen <- as.im(covValue, W = W)