如何对已经采用向量的函数进行向量化?

时间:2019-02-08 23:44:50

标签: r ggplot2 dplyr

我正在尝试在R中绘制Rastrigin function的轮廓。

为此,我创建了一个由三列xyvalue组成的小标题。但是,由于函数签名是TF_rastrigin(x),其中x是输入向量,因此在正确计算值时遇到了问题。我想要一个像这样的小标题:

x        y       value
-5.12    5.12    57.84943
-5.11    5.11    56.81394
...

为了将其传递给ggplot。我当前的代码如下:

install.packages("TestFunctions")
require(TestFunctions)
dim <- 100
mw <- tibble(x = seq(0, pi, length.out = dim), y = seq(0, pi, length.out = dim), value = TF_rastrigin(c(x,y)))
ggplot(mw, aes(x = x, y = y ,z = value)) + 
  geom_raster(aes(fill = value)) + 
  geom_contour()

谁能告诉我我做错了什么或提出更好的建议吗?

1 个答案:

答案 0 :(得分:3)

首先,您希望xy的定义不同:当前的xy列是重合的,而您需要它们的值的所有可能组合。为此,我们可以使用expand.grid。对于Rastrigin函数,我们可以简单地使用apply逐行并分别在每个点获取函数值:

dim <- 100
mw <- expand.grid(x = seq(0, pi, length.out = dim),
                  y = seq(0, pi, length.out = dim))
mw$value <- apply(mw, 1, TF_rastrigin)
ggplot(mw, aes(x = x, y = y ,z = value)) + 
  geom_raster(aes(fill = value)) + geom_contour()

enter image description here