У меня есть большое количество предикторов, и я стараюсь делать на них всевозможные преобразования при установке надежной линейной модели. Некоторые из этих комбинаций дают вычислительно-сингулярные системы. Мне было интересно, как идентифицировать эти системы? Я попробовал следующее (обратите внимание, что это преднамеренно глупый exmaple предназначен, чтобы сделать это не в состоянии):R: игнорировать случаи, которые являются вычислительно сингулярными
xx <- data.frame(y = rnorm(100), x = (1:100), z = 2*(1:100))
zz <- try(rlm(y ~ x + z, data = xx))
Error in rlm.default(x, y, weights, method = method, wt.method = wt.method, :
'x' is singular: singular fits are not implemented in 'rlm'
length(intersect(class(zz), "try-error")) == 1
[1] TRUE
Однако, это не работает. в том смысле, что возврат прерывает цикл, в котором он выполняется. Любые идеи относительно того, как справиться с этим? Еще раз спасибо!
Я бы рекомендовал использовать 'tryCatch', а не' try' - с ним гораздо удобнее работать. – Gregor
Но я не уверен, что ваш код не работает. Просто потому, что печать ошибок не означает, что он остановил цикл (вы можете использовать 'try' с' silent = TRUE', чтобы не допустить ошибки печати). Используя ваши данные, запустите 'for (i в 1: 2) { if (i == 1) zz <- try (MASS :: rlm (y ~ x + z, data = xx)); print (i) } 'будет печатать как 1, так и 2 (оба после того, как ошибка будет напечатана), таким образом, цикл не будет нарушен ошибкой. – Gregor
Возможно, у вас есть ошибка в другом месте вашего цикла, а не завершена в 'try()'? – Gregor