2017-05-23 10 views
0

고정 된 선에 대해 거리에 따라 값을 할당하는 함수에서 im 객체를 만들고 싶습니다. 즉, 해당 점이 떨어져있는 경우입니다. 그 값은 0에 가깝고 이것이 라인에 가깝다면 반대 값입니다. 나는 다음과 같은 기능을 만들었습니다 :이 오류가R : 내 모델의 공변량이 될 함수에서 im 객체 생성

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

:

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

기능이 잘 작동을, 지금은 메신저 개체를 만들려고

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을 사용할 수 있습니다. 이제 공항에서 나는 세부 사항을 채울 수 없습니다.