Предупреждающее сообщение при построении кусочной функции в R - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь построить эту функцию в R

f <- function(a,b,c,x){
 if(a<=x){
   return(c*x)} 
 if(x<=b){
   return(-c*x)}
 return(0)}

, но когда я пытаюсь построить ее с помощью:

a<-0
b<-6
c<-3
curve(f(a,b,c,x), xlim=c(0,6), ylim=c(0,3), col='blue', lwd=3, add=FALSE)

, я получаю:

Warning message in if (a <= x) {:
“the condition has length > 1 and only the first element will be used”

Любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 01 мая 2020

Ваша функция f не может работать с векторами для x, поскольку условие (a <= x) непросто оценить для вектора.

Давайте посмотрим на

x <- -6:6
f(a,b,c,x)

Ваша функция f не понимает, что делать с x при оценке

if (a <= x) { code }

, поэтому всегда используется первый элемент x.

Итак, что делать?

x   <- -6:6
f_2 <- function(x) { sapply(x, function(x) f(a,b,c,x)) }

curve(f_2, xlim=c(-6,6), ylim=c(0,20), col="blue", lwd=2, add=FALSE)

Мы определяем новую функцию f_2. sapply берет один элемент из x и использует его вместе с f(a,b,c,x), чем использует следующий элемент et c. Эта функция работает с векторами x в качестве входных данных.

Сравните это с

curve(f(a,b,c,x), xlim=c(-6,6), ylim=c(0,20), col="blue", lwd=2, add=FALSE)

для лучшего понимания.

...