2014-11-04 2 views
1

У меня есть список моделей и вы хотите вернуть массив (а не список) их коэффициентов. (Для любопытных, я бег одну модели на данных из кучи разных нейронов Я хотел бы массив из коэффициентов X нейроны.). Следующий работает отлично, если все модели работают успешно:Использование sapply (,, simplify = TRUE)

Coefs = sapply(ModelList, coef) 

Но если одна из моделей выходит из строя, то coef() возвращает «NULL», которая отличается от других возвращаемых значений, и я получаю список вместо массива. :(

Мое решение работает и общее назначение, но ужасно неуклюжий:

Coefs = sapply(ModelList, coef) 
typical = Coefs[[1]]    # (ought to ensure that this is not NULL!) 
typical[1:length(typical)] = NA # Replace all coefficients with NA 
Bad = sapply(ModelList, is.null) # Find the bad entries 
for (i in which(Bad))   # For each 'NULL', (UGH! A LOOP!) 
    Coefs[[i]] = typical   # replace with a proper entry (of NAs) 
Coefs = simplify2array(Coefs) # Now I can convert it to an array 

Есть ли лучшее решение

Благодаря

Larry

ответ

1

Еще! маленький неуклюжий:

sapply(ModelList, function(x) ifelse(is.null(coef(x)), NA, coef(x))