Its because '[[' accept only element, so you need use '[':

q[crossRsorted[,1]]



On Wed, Jul 8, 2009 at 10:28 AM, Godmar Back <godmar@gmail.com> wrote:

> On Wed, Jul 8, 2009 at 4:22 AM, Petr PIKAL <petr.pikal@precheza.cz> wrote:
>
> > Hi
> >
> > r-help-bounces@r-project.org napsal dne 07.07.2009 19:06:17:
> >
> > > Hi,
> > >
> > > I am confused about how to select elements from a list.
> > >
> > > I'm trying to select all rows of a table 'crossRsorted' such that the
> > > mean of a related vector is > 0.  The related vector is accessible as
> > > a list element l[[i]] where i is the row index.
> > >
> > > I thought this would work:
> > >
> > > > crossRsorted[mean(q[[ crossRsorted[,1] ]], na.rm = TRUE) > 0, ]
> > > Error in q[[crossRsorted[, 1]]] : no such index at level 2
> >
> > Strange, I got completely different error. Couldn't be that only
> ***you***
> > have crossRsorted?
>
>
> Ok, fair enough. I'm still thinking of a language in which the meaning of
> operators is apparent from their syntactical structure - probably need to
> read more of "The R Inferno".
>
> Here's an example that reproduces the problem, I think (though the error
> message is slightly different):
>
> > q<-list()
> > q[[105]] <- as.numeric(c(0,0,1))
> > q[[104]] <- as.numeric(c(1,1,1))
> > q[[10]] <- as.integer(c(3,3,1))
> > crossRsorted <- data.frame(i = c(105, 104,10))
> > q[[ crossRsorted[,1] ]]
> Error in q[[crossRsorted[, 1]]] : recursive indexing failed at level 2
>
> Even though the list 'q' has component 105, 104, and 10, the expression q[[
> crossRsorted[,1] ]] causes an error.
> Why?
>
> And why does this work:
>
> > q[[c(105)]]
> [1] 0 0 1
>
> but not this:
>
> > q[[c(105,104)]]
> Error in q[[c(105, 104)]] : subscript out of bounds
> > q[[c(105,104,10)]]
> Error in q[[c(105, 104, 10)]] : recursive indexing failed at level 2
>
> even though q[[105]], q[[104], and q[[10]] are perfectly legitimate items?
>
> Coming back to my question, how to I express "select all i in a vector for
> which q[[i]] meets some predicate, where q is a list?"
>
> Thank you for the tip about 'str' - that's the typeof function I've been
> craving. (I thought 'attributes' or 'summary' was all there was...)
> The output for str in the original problem:
>
> In my original problem, the output is:
>
>
> > str(crossRsorted)
> 'data.frame':   15750 obs. of  5 variables:
>  $ i     : num  105 104 9 8 10 9 98 97 10 8 ...
>  $ j     : num  104 105 8 9 9 10 97 98 8 10 ...
>  $ r     : num  -0.973 -0.973 0.764 0.764 0.744 ...
>  $ n     : num  135 135 138 138 138 138 136 136 138 138 ...
>  $ pvalue: num  2.90e-86 2.90e-86 0.00 0.00 0.00 ...
>
> and
>
> > str(q)
> List of 165
>  $ : NULL
>  $ : NULL
>  $ : NULL
>  $ : NULL
>  $ :'data.frame':       138 obs. of  1 variable:
>  ..$ howdidyouhear: chr [1:138] "0 3" "3" "3" "3" ...
>  $ :'data.frame':       138 obs. of  1 variable:
>  ..$ approximatelywhendidyoustart: int [1:138] 0 0 5 1 5 5 1 2 6 0 ...
> [ main body deleted ]
>  $ :'data.frame':       138 obs. of  1 variable:
>  ..$ revisiontestpage: num [1:138] 0 0 0 0 0 0 0 0 0 0 ...
>
> basically - a heterogeneous sparse list of NULL and data.frames of types
> character, num, and int.
>
> However - by construction - the q[[i]] for i in crossRsorted[,1] are all
> non-NULL, as in my small reproducible example above.
>
> with data frame and list
> >
> > df1[sapply(list1,mean)>0,]
> >
> > selects rows of df1 which correspond to list elements with mean >0
> >
>
> I can't run 'sapply' over my list because sapply will also iterate over the
> NULLs. I want to access only those components in list1 that occur in
> df1[1,].
>
>  - Godmar
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O

	[[alternative HTML version deleted]]


