使用可修改全局范围内变量副本的函数制作3d图

时间:2019-01-17 21:13:16

标签: r 3d vectorization

我正在尝试在r中进行一些3d平面图绘制,当我尝试使用outer函数时会出现奇怪的行为。 outer采用了用户定义的函数,该函数在给定任何(x,y)对的情况下产生z轴值。我该如何写一个函数

  • 已被安全地矢量化,并且
  • 还可以正确修改全局范围内的变量副本。

例如,此代码

x <- c(4,5,6)
my_f <- function(first, second){
  x[1] <- first
  sum(x) + second
}
a <- b <- c(1,2,3)
c <- outer(a,b, my_f)
row.names(c) <- b
colnames(c) <- a

产生

   1  2  3
1 13 14 15
2 13 14 15
3 13 14 15

当我期望

     [,1] [,2] [,3]
[1,]   13   14   15
[2,]   14   15   16
[3,]   15   16   17

至少它会提示我,并给我一条警告消息:

Warning message:
In x[1] <- first :
  number of items to replace is not a multiple of replacement length

1 个答案:

答案 0 :(得分:0)

效果很好:

x <- c(4,5,6)
my_f <- function(first, second){
  x[1] <- first
  sum(x) + second
}
a <- b <- c(1,2,3)
args <- expand.grid(a,b)
z <- mapply(my_f, args[,1], args[,2])
dim(z) <- c(length(a), length(b))