[Rd] Lemon drops

Marc Schwartz MSchwartz at MedAnalytics.com
Tue Mar 15 20:30:00 CET 2005


On Tue, 2005-03-15 at 20:05 +0100, Achim Zeileis wrote:
> On 15 Mar 2005 18:26:46 +0100 Peter Dalgaard wrote:
> 
> > Marc Schwartz <MSchwartz at MedAnalytics.com> writes:
> > 
> > > On Tue, 2005-03-15 at 18:05 +0100, Peter Dalgaard wrote:
> > > > I bumped into the following situation:
> > > > 
> > > > Browse[1]> coef
> > > >             deg0NA deg4NA deg8NA deg0NP deg4NP deg8NP
> > > > (Intercept)    462    510    528    492    660    762
> > > > Browse[1]> coef[,1]
> > > > [1] 462
> > > > Browse[1]> coef[,1,drop=F]
> > > >             deg0NA
> > > > (Intercept)    462
> > > > 
> > > > where I really wanted neither, but
> > > > 
> > > > (Intercept)
> > > >         462
> > > > 
> > > > Anyone happen to know a neat way out of the conundrum?
> > > > 
> > > > I can think of
> > > > 
> > > > rowSums(coef[,1,drop=F])
> > > > 
> > > > or of course
> > > > 
> > > > val <- coef[,1]
> > > > names(val) <- rownames(x))
> > > > 
> > > > but the first one is sneaky and the second gets a bit tedious...
> > > 
> > > Peter,
> > > 
> > > How about something like this:
> > > 
> > > > x
> > >             deg0NA deg4NA deg8NA deg0NP deg4NP deg8NP
> > > (Intercept)    462    510    528    492    660    762
> > > IV1              1      2      3      4      5      6
> > > 
> > > 
> > > > x[1]
> > > (Intercept)
> > >         462
> > > 
> > > > str(x[1])
> > >  Named num 462
> > >  - attr(*, "names")= chr "(Intercept)"
> > > 
> > > 
> > > Does that work or am I missing something?
> > 
> > You're missing the context. What I really need is something that will
> > extract a column of a matrix as a vector in the usual way, but will
> > not get confused if there is only one row.
> 
> Maybe:
>   coef[,1,drop=FALSE][1:nrow(coef)]
> ?
> Z


Hmmmm....interesting.

At the risk of this degenerating into an obfuscated R contest, Achim's
post just gave me an idea to build on my original thought:


# With one row:
> x
            deg0NA deg4NA deg8NA deg0NP deg4NP deg8NP
(Intercept)    462    510    528    492    660    762

> apply(t(x)[1, , drop = FALSE], 2, FUN = "[")
(Intercept)
        462



# Now with two rows:
> x2
            deg0NA deg4NA deg8NA deg0NP deg4NP deg8NP
(Intercept)    462    510    528    492    660    762
IV1              1      2      3      4      5      6

> apply(t(x2)[1, , drop = FALSE], 2, FUN = "[")
(Intercept)         IV1
        462           1


Marc



More information about the R-devel mailing list