Since I didn't get an answer to this question, I'm rephrasing my question in
simpler terms:

I have  a dataframe and I want to split it based on the levels of one of its
columns, and apply a function to each section of the data. Output of the
function may be drawing a plot, returning  a value, whatever. I want to do
it efficiently though (for loops are very slow).

How can I do that?

M

On Tue, Jul 26, 2011 at 10:12 AM, Ista Zahn <izahn@psych.rochester.edu>wrote:

> Hi Merik,
> Please keep the mailing list copied.
>
> On Tue, Jul 26, 2011 at 6:44 AM, Merik Nanish <merik.nanish@gmail.com>
> wrote:
> > You can convert my data into a dataframe simply by dat <- data.frame(id,
> > month, value). That doesn't help though.
>
> Can you be more specific? What is the problem you are having?
>
> And no, that's not what I'm looking
> > for. What I intend to do is for by to loop through the data based on
> levels
> > of "id" factor (1,2, and 3), and for each level, for my function to
> printout
> > the values of "value" and "month" belonging to the section of data with
> that
> > "id".
>
> OK, easy enough:
>
> dat.tmp <- data.frame(id, month, value)
> my.plot <- function(dat) {print(dat[, c("id", "value")])}
> by(dat.tmp, id, my.plot)
>
> > Right now, I achieve this with a for loop but I want to avoid looping in
> the
> > data as much as possible.
>
> Why? What do you have against loops?
>
> Best,
> Ista
>
> >
> > On Tue, Jul 26, 2011 at 12:18 AM, Ista Zahn <izahn@psych.rochester.edu>
> > wrote:
> >>
> >> Hi Merik,
> >> by() works most easily with data.frames. Is this what you are after?
> >>
> >> my.plot <- function(dat) { print(dat$value);
> >> print(dat$month[dat$id==dat$value]) }
> >> by(dat.tmp, id, my.plot)
> >>
> >> Best,
> >> Ista
> >>
> >> On Mon, Jul 25, 2011 at 9:19 PM, Merik Nanish <merik.nanish@gmail.com>
> >> wrote:
> >> > Hello,
> >> >
> >> > Here are three vectors to give context to my question below:
> >> >
> >> > *id    <- c(1,1,1,1,1,2,2,2,3,3,3))
> >> > month <- c(1, 1, 2, 3, 6, 2, 3, 6, 1, 3, 5)
> >> > value <- c(10, 12, 11, 14, 16, 12, 10, 8, 14, 11, 15)*
> >> >
> >> > and I want to plot "value" over "month" separately for each "id".
> Before
> >> > I
> >> > can do that, I need to section both month and value, based on ID. I
> >> > create a
> >> > my.plot function like this (at this point, it doesn't draw any plots,
> it
> >> > is
> >> > just an effort to help my understand what I'm doing):
> >> >
> >> > *my.plot <- function(y) { print(y); print(month[id==y]) }*
> >> >
> >> > Now, I tried:
> >> >
> >> > *by(value, id, my.plot)*
> >> >
> >> > But of course, it didn't do what I wanted. I realized that the
> parameter
> >> > passed to my.plot, is a "secion of value" per ID, and not the ID value
> >> > itself. Question is, how can I get the value of factor ID at each
> level
> >> > of
> >> > by()?
> >> >
> >> > Please advise,
> >> >
> >> > Merik
> >> >
> >> >        [[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.
> >> >
> >>
> >>
> >>
> >> --
> >> Ista Zahn
> >> Graduate student
> >> University of Rochester
> >> Department of Clinical and Social Psychology
> >> http://yourpsyche.org
> >
> >
>
>
>
> --
> Ista Zahn
> Graduate student
> University of Rochester
> Department of Clinical and Social Psychology
> http://yourpsyche.org
>

	[[alternative HTML version deleted]]

