создание 3D-графиков с функциями, которые изменяют копии переменных в глобальной области видимости - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь сделать некоторые трехмерные графики поверхности в 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

1 Ответ

0 голосов
/ 19 января 2019

Это работает довольно хорошо:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...