Поверхность двумерной разрывной функции - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть двумерная функция шага, для которой я хочу создать поверхность.Функция выглядит по существу следующим образом:

df<-data.frame(a = rnorm(100, 0, 10), b = rnorm(100, 0, 10))
f<-function(x,y){
  mean(df$a * x >= df$b * y)
}

Когда я использую plot3d из пакета rgl, я всегда получаю сообщение об ошибке вроде

Error in dim(zvals) <- dim(xvals) : 

dims [product 10201]не соответствуют длине объекта [1]

В чем здесь проблема?Есть ли альтернатива, как 3D-график моей функции?

1 Ответ

0 голосов
/ 05 апреля 2019

Проблема в определении f. plot3d(f) будет передавать векторы для x и y, а ваша функция будет принимать среднее значение для всего и возвращать одно значение.

Самый простой способ исправить это - вызвать функцию Vectorize, которая заключает в циклы f, чтобы вычислить ее отдельно для каждой пары x, y. Например, с вашим определением f, как в вопросе,

plot3d(Vectorize(f), xlim = c(-2,2), ylim = c(-2, 2))

производит этот участок:

screenshot

...