0

我想将函数的水平图绘制为热图,我不确定我是否以最有效的方式为绘图初始化网格。目前,我正在使用下面的代码,我想知道是否grid$z<- wrapper(grid$x,grid$y,MyFunction)真的是分配 -Values 的最佳方式z,假设它MyFunction可能不知道如何处理向量值参数。

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

1 回答 1

0

如果MyFunction未矢量化,您可以使用apply代替您的wrapper函数:

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

如果MyFunction是矢量化的,您可以使用outer

z <- outer(x, y, MyFunction)
grid <- expand.grid(x=x, y=y)
grid$z <- as.vector(z)
于 2013-11-15T14:54:10.597 回答