остановить, когда вызов не из "aov ()" или "lm ()" в R? - PullRequest
0 голосов
/ 19 мая 2018

У меня есть функция R, запрограммированная на stop , когда ввод не является вызовом от "aov()" или "lm()".

Ниже я ожидаю, что при использовании fit3 в качестве ввода моя функция будет stop, но мне интересно, почему это не так?

PS Функция корректно останавливается при подаче fit4, НО не останавливается при подаче fit3;ПОЧЕМУ?

fit2 <- aov(mpg ~ wt, data = mtcars)
library(rstanarm)  
fit3 <- stan_glm(mpg ~ wt, data = mtcars) # This call is from "rstanarm" package !!
fit4 <- glm(vs~mpg, data = mtcars)


bb <- function(fit = NA){

  if(!(any(is.na(fit)))){  

if(fit$call[1] != "lm()" && fit$call[1] != "aov()") stop("Error") else "OK"
  }
}
# Examples of use:
bb(fit = fit4) # stops as expected ! because call is not from "lm()" or "aov()"
bb(fit = fit3) # I expect HERE to stop also; why it doesn't? !!!!

1 Ответ

0 голосов
/ 19 мая 2018

Это причина:

> !(any(is.na(fit3)))

[1] FALSE

is.na (fits3) возвращает логический именованный вектор.Может быть, вы пытались проверить is.na (fit3 $ call) вместо всех элементов объекта fit3?

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