Как написать условные утверждения в r - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь написать функцию

Функция Пуассона pmf, называемая функцией smart.pois x и lamba, в этой функции я хотел бы проверить следующие условия для x 1. Если x равенотрицательное, возвращает пропущенное значение (NA, .).2. Если x нецелое число, обрежьте x и продолжите.3. Если x слишком велик для функции факториала, верните наименьшее возможное числовое значение.

Я написал эту функцию, но не смог правильно написать условие.

smart.pois <- function(x, lambda){
y<- round((exp(-lambda))* (1/factorial(x))*exp(x*log (lambda)),3)
return (y)
}
if (x == "Negative")
return (NA)

if (x =){
return 
} 

Спасибо зазаранее

1 Ответ

0 голосов
/ 08 июля 2019

В своих функциях вы производите вычисления, а затем делаете тест независимым. Я сначала проверил бы условия и обновил бы x, а затем произвел бы вычисления как:

smart.pois <- function(x, lambda, xmax=Inf) {
  x <- pmin(x, xmax) #3. If x is too large - you have to define what is too large
  x <- trunc(x)      #2. If x is non-integer
  idx <- x < 0       #1. If x is negative
  x[idx] <- 0   #Overwrite negative x to avoid warnings
  ifelse(idx, NA, round((exp(-lambda))* (1/factorial(x))*exp(x*log (lambda)),3))
}

smart.pois(c(-1, 1, 1.2, 1.9, 999), 1, 100)
#NA 0.368 0.368 0.368 0.000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...