Есть ли способ заставить сценарий R продолжить после получения сообщений об ошибках вместо остановки выполнения? - PullRequest
8 голосов
/ 05 декабря 2010

В настоящее время я запускаю ANOVA для проекта в школе, в котором есть большое количество возможных прогонов (около 1400), но некоторые из них не могут запустить ANOVA в R. Я написал сценарий для запуска всех ANOVA но некоторые из них не будут работать, и файл Rout дает мне Ошибка в contrasts<- (*tmp*, значение = "contr.treatment"): контрасты могут применяться только к факторам с 2 или более уровнями Вызовы: aov ... model.matrix -> model.matrix.default -> контрасты <- Исполнение остановлено </p>

Есть ли способ написать сценарий, который заставит R продолжать сценарий, несмотря на ошибку?

Весь мой сценарий, кроме загрузки файла, прикрепления, создания приемника, загрузки библиотеки и т. Д., ...

ss107927468.model<-aov(Race.5~ss107927468, data=snp1)
summary(ss107927468.model)

Любая помощь будет оценена.

Ответы [ 3 ]

8 голосов
/ 05 декабря 2010

См. Функцию try() и ее страницу справки (?try). Вы оборачиваете свое R-выражение в вызов try(), и, если оно успешно, результирующий объект содержит, в этом случае, подобранную модель. Если это не удается, то возвращается объект с классом "try-error". Это позволяет легко проверить, какие модели работали, а какие нет.

Вы можете выполнить тестирование, чтобы решить, следует ли распечатывать сводку для модели или просто сообщение об ошибке, например ::100100

ss107927468.model <- try(aov(Race.5~ss107927468, data=snp1))
if(isTRUE(all.equal(class(ss107927468.model), "try-error"))) {
    writeLines("Model failed")
} else {
    summary(ss107927468.model)
}
4 голосов
/ 06 декабря 2010

Я использую failwith в пакете plyr.Вы можете использовать это в сочетании с llply и обернуть свою функцию вокруг него.

1 голос
/ 05 декабря 2010

Функции try () и двоюродные братья, которые связаны со страницей справки для try (), позволят вам проверить состояние ошибки, выполнить соответствующие действия, такие как запись в журнал ошибок (или ничего не делать), и продолжить работу изящно.

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