Skip to content

Two Noobie questions

10 messages · AllenL, David Winsemius, Simon Pickett +5 more

#
1. I have a list of lm (linear model) objects. Is it possible to select,
through subscripts, a particular element (say, the intercept) from all the
models? I've tried something like this:

List[[1:length(list)]][1]
All members of the list are similar. My goal is to have a list of the
intercepts and lists of other estimated parameters. Is it better to convert
to a matrix? How to do this?

2. Connected to this, how do I convert from a list back to a vector? This
problem arose from using "split" to split a vector by a factor, then
selecting a subset of this (ie. length>10), leaving me with subset list of
my original. Unsplit(newList, factor) doesn't work, presumably due to my
removal of some values. Thoughts?

Thanks!
-Allen
#
On Jan 6, 2009, at 1:50 PM, AllenL wrote:

            
?coef
if your list of models is ml, then perhaps something like this  
partially tested idea:

lapply(ml, function(x) coef(x)[1] )

This is what I get using that formulation an available logistic model:

 > coef(lr.TC_HDL_BMI)[1]
Intercept
-6.132448
?unlist

 > ll <- list(1,2,3,4)
 > ll
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

 > unlist(ll)
[1] 1 2 3 4
 > str(unlist(ll))
  num [1:4] 1 2 3 4
 > is.vector(unlist(ll))
[1] TRUE
#
Thanks for your help!

I combined the above two to get the following, which seems to work (if
somewhat inelegant):

int.List<-unlist(lapply(lmList, function(x) {coef(x)[1]}),use.names=FALSE)
lmList is my list of lm objects. 
-Allen
David Winsemius wrote:

  
    
#
Allen,

I would suggest reading about the str() function. It's great for getting 
"inside" model outputs and seeing how they are constructed so you can 
extract all the specific calculations you want.

Its a bit fiddly to get used to but there are plenty of examples on this 
forum.

Hope this helps.

Simon.


----- Original Message ----- 
From: "AllenL" <allen.larocque at gmail.com>
To: <r-help at r-project.org>
Sent: Tuesday, January 06, 2009 7:47 PM
Subject: Re: [R] Two Noobie questions
#
You can also use subscripts to get at things with a bit of playing around.
Call:
lm(formula = x ~ seq(1, length(x), 1))

Residuals:
     Min       1Q   Median       3Q      Max 
-40.0961 -15.5289  -0.6489  12.7488  41.0107 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)          165.259602   1.620906 101.955   <2e-16 ***
seq(1, length(x), 1)  -0.048711   0.005551  -8.775   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Residual standard error: 18.19 on 503 degrees of freedom
Multiple R-squared: 0.1328,     Adjusted R-squared: 0.131 
F-statistic:    77 on 1 and 503 DF,  p-value: < 2.2e-16
[1] 0.005551145
[1] -0.04871091
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of AllenL
Sent: 06 January 2009 19:48
To: r-help at r-project.org
Subject: Re: [R] Two Noobie questions


Thanks for your help!

I combined the above two to get the following, which seems to work (if somewhat inelegant):

int.List<-unlist(lapply(lmList, function(x) {coef(x)[1]}),use.names=FALSE) lmList is my list of lm objects. 
-Allen
David Winsemius wrote:

  
    
#
On Thu, 8 Jan 2009, Neil Beddoe wrote:

            
You can, but it is easier not to fight R to do so.  Much more transsparent 
is:

cf <- coef(summary(<lm fit>)
cf[2,2] # index as a matrix.

You are

a) indexing a matrix as a vector
b) using [[]] on a numeric vector, which is unneded
c) indexing a list by number where indexing by name is simpler and using 
the extractor function coef() is even simpler.

  
    
#
I have a data frame with unequal rows length separated by comma.....I
have to read the data first and then calculate number of comma in each
row...how can I do that

Regards Rahul
#
Hello,

You are not very precise there. Do you mean that the rows in your text
file do not all have the same number of separators (commas, in your
case)?

Best regards,

Carlos J. Gil Bellosta
http://www.datanalytics.com
On Thu, 2009-01-08 at 04:38 -0500, Rahul-A.Agarwal at ubs.com wrote:
#
I doubt that you have a dataframe with those features, since R would  
not allow such an event; more likely you have data in a file. If your  
goal is to determine the number of items, then you should definitely  
look at:

?count.fields

count.fields(filename, sep=",")  # would give you 1 + the number  
commas in each line of the file