[R] for loop
David Winsemius
dwinsemius at comcast.net
Mon Nov 1 12:48:11 CET 2010
On Nov 1, 2010, at 6:41 AM, Petr PIKAL wrote:
> Hi
>
>
> r-help-bounces at r-project.org napsal dne 31.10.2010 09:59:00:
>
>> Hi Dennis,
>>
>>
>>
>> Thank you for your extensive explanations. Yes, I guess I did not
> explain what
>> I would like to do.
>>
>> Basically I would like to conduct a linear regression for each of 15
> classes.
>
> In that case you can also use a nlme package. However I would strongly
> recommend a Pinheiro-Bates book which accompanies this package for
> complete utilisation the power of nlme package.
>
> Or you can convert your column with values 1-15 to factor and call
> simple
> linear model
>
> fit<-lm(y~x+factor.column, data=razred)
Which would force the slopes of the estimate regression lines to have
a common value and only allow the factor estimates to reflect
different group means. If he wants a separate mean (actually getting
an estimate for the offset to the intercept) and slope estimate for
each group, then:
fit<-lm(y ~ x * factor.column, data=razred)
And in that case, an introductory regression text will suffice.
--
David.
>
> Regards
> Petr
>
>
>> Your answers gave me new
>>
>> Perspective on how R works.
>>
>>
>>
>> Thanks again for the help,
>>
>> m
>>
>>
>>
>> From: Dennis Murphy [mailto:djmuser at gmail.com]
>> Sent: Sunday, October 31, 2010 4:40 AM
>> To: MatevĹľ PavliÄŤ
>> Cc: r-help at r-project.org
>> Subject: Re: [R] for loop
>>
>>
>>
>> Hi:
>>
>> If your objective is to make 15 plots, one for each level of razred,
> then you
>> don't need to make 15 individual data frames first. The lattice and
> ggplot2
>> packages allow conditioning plots. You haven't mentioned what types
>> of
> plots
>> you're interested in getting, but if it's something simple like a
> scatterplot
>> of y vs. x for each level of razred, it's not that hard to do. Let's
> fake some data:
>>
>> d <- data.frame(razred = rep(LETTERS[1:15], each = 10),
>> x = rep(1:10, 15),
>> y = rep(2 + 0.5 * 1:10, 15) + rnorm(150))
>>
>> d has 15 levels of razred with 10 observations at each level.
>> razred is
> a
>> factor, the other variables are either integer or numeric.
>>
>> Produce scatterplots of y vs. x for each level of razred, using
>> both the
>
>> lattice and ggplot2 packages:
>>
>> library(lattice)
>> # each plot adds a new feature - run one plot at a time.
>> xyplot(y ~ x | razred, data = d, type = c('p', 'r'))
>> xyplot(y ~ x | razred, data = d, type = c('p', 'r'), layout = c(3,
>> 5))
>> xyplot(y ~ x | razred, data = d, type = c('p', 'r'), layout = c(3,
>> 5),
> as.table = TRUE)
>>
>> library(ggplot2)
>> ggplot(d, aes(x, y)) + geom_point() + geom_smooth(method = 'lm') +
>> facet_wrap( ~ razred, ncol = 3)
>> ggplot(d, aes(x, y)) + geom_point() + geom_smooth(method = 'lm', se =
> FALSE) +
>> facet_wrap( ~ razred, ncol = 3)
>>
>> If instead you want something like a scatterplot matrix for each data
> subset
>> defined by level of razred, then maybe something like this (?):
>>
>> # add a new variable to the data frame
>> # splom is the scatterplot matrix function in lattice
>> d$z1 <- rnorm(150)
>> splom(~ d[, -1] | razred, data = d, layout = c(2, 2, 4))
>>
>> Just guessing here since you didn't make your objective explicit.
>>
>> It's entirely possible that you can conduct a significant part of
>> your
> data
>> analysis without having to split the data into subsets. Several
>> summary
>> functions, for example, can compute a number of summary functions by
> group
>> with a one-line call. Here are a couple of examples, one using
> aggregate()
>> from the base package and another using function ddply() from the
>> plyr
> package:
>>
>> aggregate(y ~ razred, data = d, FUN = mean)
>> razred y
>> 1 A 4.816841
>> 2 B 4.520804
>> 3 C 5.196329
>> 4 D 4.615575
>> 5 E 3.982240
>> 6 F 4.466559
>> 7 G 4.938669
>> 8 H 4.539541
>> 9 I 4.354991
>> 10 J 4.573654
>> 11 K 4.450624
>> 12 L 5.138087
>> 13 M 4.931111
>> 14 N 4.879493
>> 15 O 5.087452
>>
>> library(plyr)
>> ddply(d, 'razred', summarise, mx = mean(x), my = mean(y), mz1 =
> mean(z1))
>> razred mx my mz1
>> 1 A 5.5 4.816841 -0.01745305
>> 2 B 5.5 4.520804 0.24724069
>> 3 C 5.5 5.196329 0.18717750
>> 4 D 5.5 4.615575 0.18885590
>> 5 E 5.5 3.982240 -0.91284339
>> 6 F 5.5 4.466559 0.36479266
>> 7 G 5.5 4.938669 -0.36359562
>> 8 H 5.5 4.539541 0.06061162
>> 9 I 5.5 4.354991 0.05138409
>> 10 J 5.5 4.573654 0.31160018
>> 11 K 5.5 4.450624 0.17458712
>> 12 L 5.5 5.138087 -0.26482357
>> 13 M 5.5 4.931111 -0.39194953
>> 14 N 5.5 4.879493 0.33154075
>> 15 O 5.5 5.087452 0.32816931
>>
>> There are a number of functions and packages that will do this sort
>> of
> thing
>> quite well - I'll mention doBy, data.table, Hmisc and sqldf as
>> excellent
>
>> options, noting that there are other packages and functions in the
>> apply
>
>> family that can perform groupwise processing seamlessly. The point of
>> mentioning this is so that you don't automatically think you have to
> split the
>> data in myriad ways before you can process a function. The good folks
> that
>> designed this language, and the many people who have contributed
>> code to
> the R
>> project, are pretty smart, and have devised fairly simple ways to
> process
>> data, even if it's large.
>>
>> Of course, it's always possible that splitting is necessary; if
>> you're
> willing
>> to be a little more forthcoming about your analysis goals, you
>> might get
> a
>> better targeted response..
>>
>> HTH,
>> Dennis
>>
>>
>>
>> On Sat, Oct 30, 2010 at 12:00 PM, MatevĹľ PavliÄŤ
> <matevz.pavlic at gi-zrmk.si> wrote:
>>
>> Just one more thing...
>> I get a list with 15 data.frames :
>>
>> List of 15
>> $ 1:'data.frame': 7 obs. of 9 variables:
>> ..$ vrtina : Factor w/ 6 levels "T1A-1","T1A-2",..: 1 1 2 2
>> 5 5
> 5
>> ..$ globina.meritve: num [1:7] 7.6 8.5 10.4 17.4 12.5 15.5 16.5
>> ..$ E0 : num [1:7] 4109 2533 491 810 2374 ...
>> ..$ Eur1 : num [1:7] 6194 4713 605 1473 NA ...
>> ..$ Eur2 : num [1:7] 3665 7216 266 4794 7387 ...
>> ..$ Eur3 : num [1:7] 3221 3545 920 3347 6768 ...
>> ..$ H : num [1:7] 8 5.9 5.9 6.9 9.3 10.9 10
>> ..$ Mpl : num [1:7] 61.9 136.7 19.9 96.4 178.5 ...
>> ..$ class : int [1:7] 1 1 1 1 1 1 1
>> .
>> .
>> .
>>
>> But how would I acces them (i.e. to draw a plot for each data.frame
>> for
> each
>> data.frame in a list)?
>>
>> Thanks,m
>>
>>
>> -----Original Message-----
>> From: David Winsemius [mailto:dwinsemius at comcast.net]
>> Sent: Saturday, October 30, 2010 8:24 PM
>> To: MatevĹľ PavliÄŤ
>> Cc: r-help at r-project.org
>> Subject: Re: [R] for loop
>>
>>
>> On Oct 30, 2010, at 2:07 PM, MatevĹľ PavliÄŤ wrote:
>>
>>> Hi,
>>>
>>> I know this is probalby a very trivial thing to do for most of the R
>>> users, but since I just strated using it I have some problems....
>>>
>>> I have a data.frame with a field called "razred". This field has
>>> values from 1 up to 15.
>>>
>>> Is it possible to create a for loop that would create a new data
>>> frame
>>> for each of the "razred" values.
>>
>> The R-way would be to use the split function and leave the result
>> in a
> list to
>> which the same operation could be also repeatedly performed using
> lapply.
>>
>> ?split
>>
>> And take a look at the fourth example applying split to the builtin
> airqualitydataframe.
>>
>> The plyr package also provides functions on dataframes.
>>
>> --
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>> ______________________________________________
>> R-help at 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.
>>
>>
>>
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at 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.
>
> ______________________________________________
> R-help at 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.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list