在R数据结构中存储多个模型的好方法是什么?

时间:2012-02-17 17:01:15

标签: r

R编程允许定义线性模型(例如lm)并将它们分配给变量。

f1 <-  lm(sonarData$V61~., sonarData )

这是对象。

> f1 

Call:
lm(formula = sonarData$V61 ~ ., data = sonarData)

Coefficients:
(Intercept)           V1           V2           V3           V4           V5  
    1.29803     -4.20006     -4.34196     12.28351     -6.90441      0.02196  
         V6           V7           V8           V9          V10          V11  
   -1.56658      2.55997      1.43647     -1.61434      0.72176     -0.56495  
        V12          V13          V14          V15          V16          V17  
   -1.84479     -1.18588      0.81750     -0.71591      0.70529      1.30928  
        V18          V19          V20          V21          V22          V23  
   -1.83044      1.20194     -1.03330      1.07206     -1.01695      0.90517  
        V24          V25          V26          V27          V28          V29  
   -2.38743      1.56199     -0.07457     -0.82562      0.34103      1.24376  
        V30          V31          V32          V33          V34          V35  
   -3.34592      3.91707     -1.69221     -0.01213      1.42545     -2.33689  
        V36          V37          V38          V39          V40          V41  
    2.15805      0.23958     -0.19744     -1.29952      1.47017     -0.71109  
        V42          V43          V44          V45          V46          V47  
    0.64684     -0.17931     -0.41240     -0.41779      0.34729     -2.54380  
        V48          V49          V50          V51          V52          V53  
   -0.77669     -9.83263     20.01045      4.64701     -7.00754    -10.62042  
        V54          V55          V56          V57          V58          V59  
  -12.95094     23.36374      8.29332      3.12945    -16.89160    -13.58556  
        V60  
    6.55849  

自然扩展是存储多个模型。 R manual says,“列表包含元素,每个元素都可以包含任何类型的R对象”。不幸的是,当我尝试这个时,列表数据结构会产生错误。

> aa <- list(type=any)
> aa[1] <- f1
Warning message:
In aa[1] <- f1 :
  number of items to replace is not a multiple of replacement length

看起来只存储了系数。

> aa[1]
$type
 (Intercept)           V1           V2           V3           V4           V5 
  1.29802569  -4.20006167  -4.34195592  12.28351356  -6.90440693   0.02196316 
          V6           V7           V8           V9          V10          V11 
 -1.56658231   2.55997324   1.43647370  -1.61433971   0.72175967  -0.56495060 
         V12          V13          V14          V15          V16          V17 
 -1.84479102  -1.18587951   0.81750259  -0.71591460   0.70529370   1.30927725 
         V18          V19          V20          V21          V22          V23 
 -1.83043902   1.20193627  -1.03330328   1.07205668  -1.01695304   0.90516589 
         V24          V25          V26          V27          V28          V29 
 -2.38742679   1.56198758  -0.07456730  -0.82562068   0.34102565   1.24376201 
         V30          V31          V32          V33          V34          V35 
 -3.34592095   3.91707289  -1.69221059  -0.01213418   1.42545025  -2.33689151 
         V36          V37          V38          V39          V40          V41 
  2.15804936   0.23957839  -0.19743977  -1.29952333   1.47016998  -0.71108772 
         V42          V43          V44          V45          V46          V47 
  0.64683517  -0.17930867  -0.41239596  -0.41779109   0.34728768  -2.54380227 
         V48          V49          V50          V51          V52          V53 
 -0.77669122  -9.83262844  20.01045111   4.64701358  -7.00754193 -10.62042062 
         V54          V55          V56          V57          V58          V59 
-12.95093654  23.36374272   8.29331935   3.12944794 -16.89160356 -13.58556456 
         V60 
  6.55848543 

我没想到。你能帮我理解为什么吗?使用数据结构存储多个模型的正确方法是什么?

感谢您的时间和考虑。

此致 约翰

2 个答案:

答案 0 :(得分:7)

代码list(type = any)创建一个包含一个元素的长度为一的列表, function any,其名称为type

要创建空列表,请尝试list()。更好的是,尝试vector("list",5)创建一个长度为5的空列表。(这样,当您向其添加元素时,您不会增加列表,这可能非常非常慢。)

Aaron的评论提醒我要指出,要将某些内容指定为列表的元素(而不是作为子列表),您应该使用[[而不是[

答案 1 :(得分:1)

更好的解决方案是保存完整模型。对于需要很长时间才能拟合的模型,或者如果您将来希望检索它们,这是一个很好的选择。

#To save it
saveRDS(f1, "f1.rds")

#To retrieve it
f1 <- readRDS("~/f1.rds")