2017-05-23 49 views
0

我想從一個函數中創建一個im對象,該函數根據相對於固定線的距離來分配一個值,即,如果該點離開如果這條線靠近該線,則該線的值接近零並且相反。我創建了以下功能:R:從一個函數創建一個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 <- 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) 
} 

功能工作正常,現在我嘗試創建IM對象:

imagen <- as.im(covValue, W = W) 

我得到這個錯誤:

Error: length(mat) == length(xcol) * length(yrow) is not TRUE

可有人請幫助我,謝謝。

+0

不熟悉這個軟件包,但是試試像這樣:'imagen < - as.im(covValue(1,1),W = W)'。 – jsb

+1

另外,我看不到在函數參數中使用'x'和'y'的位置... – jsb

+0

@Samuel:我正在使用spatstat軟件包的書中的示例模板:f < - function(x,y (f,W =平方(6)){15 *(cos(sqrt((x-3)^ 2 + 3 *(y-3)^ 2)))^ 2}> A < - as.im – LFRC

回答

0

函數必須被矢量化,使得對於長度爲n的向量x和y,它必須返回長度爲n的向量。如果你只需要到線段的距離,你可以創建一個psp對象並使用distfun。現在在機場,所以我無法填寫細節。

相關問題