2013-11-15 5 views
0

내가 열지도와 같은 기능의 수준 플롯을 플롯 할, 그리고 내가에서 플롯의 격자를 초기화하고 경우에 나는 확실하지 않다 가장 효율적인 방법. 현재, 나는 아래의 코드로 일하고 grid$z<- wrapper(grid$x,grid$y,MyFunction)MyFunction 가능성이 벡터 값 인수 무엇을 해야할지하지 않는 가정, 정말 z -Values을 할당하는 가장 좋은 방법 있는지 궁금하고있다. MyFunction 당신이 대신 wrapper 기능의 apply을 사용할 수 있습니다 벡터화되어 있지 않은 경우filled.contour을 대체 levelplot 사용 - Z 값을 할당하는 방법을 효율적으로

library("lattice") 
MyFunction <- function(x,y){ 
    return(
    dnorm(sqrt(x^2+y^2)) 
    ) 
} 
wrapper <- function(x, y, my.fun, ...) {sapply(seq_along(x), FUN = function(i) my.fun(x[i], y[i], ...))} 
meshstep <- 0.5 
x<- seq(-20,20,meshstep) 
y <-seq(-20,20,meshstep) 
grid <- expand.grid(x=x, y=y) 
grid$z<- wrapper(grid$x,grid$y,MyFunction) 
p<- levelplot(z~x*y, grid, cuts = 10, xlab="", 
      ylab="", main="Distance to the Origin", sub="In pretty Colors" 
      colorkey = TRUE, region = TRUE) 
print(p) 

답변

0

: MyFunction는 벡터화

grid <- expand.grid(x=x, y=y) 
grid$z <- apply(grid, 1, FUN=function(XY)MyFunction(XY[1], XY[2])) 

경우 사용할 수 있습니다 outer :

z <- outer(x, y, MyFunction) 
grid <- expand.grid(x=x, y=y) 
grid$z <- as.vector(z)