Векторизация моей функции с R не работает - PullRequest
1 голос
/ 19 октября 2019

У меня есть эта функция:

fx <- function (x) {
  if (x <= 0) {
    return(-1 * (x**3))
  }
  else if (0 < x && x <= 1) {
    return(x**2)
  }
  else if (x > 1) {
    return(sqrt(x))
  }
}

Я преобразовал в функцию векторизации как:

fVectorize <- function(x) {
  result <- ifelse(x <= 0, -1 * (x**3), ifelse(0 < x && x <= 1, x**2, sqrt(x)))
  result
}

Я пробовал следующие значения, но не работает:

fVectorize(c(-2, -4, -5))
fVectorize(c(0.5, 0.3, 0.7))
fVectorize(c(3, -4, 0.7))

Похоже, это только первое условие.

Есть идеи?

1 Ответ

5 голосов
/ 19 октября 2019

Измените && на &

fVectorize <- function(x) {
  result <- ifelse(x <= 0, -1 * (x**3), ifelse(0 < x & x <= 1, x**2, sqrt(x)))
  result
}
fVectorize(c(-2, -4, -5))
#[1]   8  64 125

fVectorize(c(0.5, 0.3, 0.7))
#[1] 0.25 0.09 0.49

fVectorize(c(3, -4, 0.7))
# [1]  1.732051 64.000000  0.490000

& выполняет поэлементную операцию, где && ищет первый элемент, возвращающий значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...