使用sapply(,, simplify = TRUE)

时间:2014-11-04 17:16:26

标签: r matrix sapply

我有一个模型列表,并希望返回其系数的数组(不是列表)。 (好奇的是,我在一堆不同神经元的数据上运行一个模型。我想要一个数组,即系数X神经元。)如果所有模型都成功运行,以下工作正常:

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

有更好的解决方案吗?

谢谢!

拉​​里

1 个答案:

答案 0 :(得分:2)

还是有点笨拙:

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