Я пытаюсь сделать некоторые трехмерные графики поверхности в r
, и я получаю странное поведение, когда пытаюсь использовать функцию outer
. outer
принимает пользовательскую функцию, которая выдает значения по оси z с любой (x, y) -парой. Как мне написать функцию, которая
- безопасно векторизовано, а
- также корректно изменяет копии переменных в глобальной области видимости.
Например, этот код
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