[R] shorter way of coding

Sarah Goslee sarah.goslee at gmail.com
Mon Dec 12 17:36:29 CET 2011


That's not a reproducible example. Paul suggested a list of formulas,
but I recommended creating a list of y variables.

In your attempt, you didn't include the y in the name of the dependent
variable; that's probably why it doesn't work.

Look at this:

> y.list <- list(y1=runif(10), y2 <- runif(10), y3 <- runif(10))
> x1 <- 1:10
> lapply(y.list, function(y)lm(y ~ x1))
$y1

Call:
lm(formula = y ~ x1)

Coefficients:
(Intercept)           x1
    0.56392     -0.02586


[[2]]

Call:
lm(formula = y ~ x1)

Coefficients:
(Intercept)           x1
    0.66375     -0.03519


[[3]]

Call:
lm(formula = y ~ x1)

Coefficients:
(Intercept)           x1
    0.29106      0.02845

Sarah

On Mon, Dec 12, 2011 at 11:21 AM, Mintewab Bezabih
<Mintewab.Bezabih at economics.gu.se> wrote:
> Dear Paul and Sarah
>
> Thanks for the suggestion. I have provided my data here in to make the results reproducable. I am actually trying to do interpoliation of climate data where x1 and x2 are my latitude and longitude and sum64-sum 368 are my rainfall observations which I need to regress against x1 and x2. In the previous I was trying to get my story clear so I did not go into details.
>
> Now when I run your suggestion below, I get the following error message. Is there anything in your instruction that I did not get right?
> many thanks
> mintewab
>
> listOfForumlas = paste(1:300, "~s(x1,x2, k=100)")
> listofResults = lapply(listOfForumlas, function(f) {
>    b<-gam(as.formula(f),data=dat)
>    vis.gam(b)
>    fitted(b)
>  })
>
> Error in model.frame.default(formula = 1 ~ 1 + x1+ x2, data = dat,  :
>  variable lengths differ (found for 'x1')
> ________________________________________
> Från: Paul Hiemstra [paul.hiemstra at knmi.nl]
> Skickat: den 12 december 2011 14:42
> Till: Mintewab Bezabih
> Kopia: r-help at r-project.org
> Ämne: Re: [R] shorter way of coding
>
> On 12/12/2011 01:16 PM, Mintewab Bezabih wrote:
>> Dear R users,
>>
>> I am using the code below to generate a fitted value of b. I have about 300 different values for for y (y1, y2, ...y300) which means I will have to write the code below 300 times to generate the 300 different fitted values for y. Is there a short way of doing that ?
>>
>> Many thanks in advance
>> Mintewab
>>
>> library(mgcv)
>> dat <- read.table("e:/minti's laptop/C/GBG/allround_survey/rainfallGPS.csv", header=T, sep=",")
>> b<-gam(y1~s(x1, x2, k=100),data=dat)
>> vis.gam(b)
>> fitted(b)
>> ______________________________________________
>> 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.
>
> Hi Mintewab,
>
> Something along these lines should work:
>
> listOfForumlas = paste(1:300, "~s(x1, x2, k=100)")
> listofResults = lapply(listOfForumlas, function(f) {
>    b<-gam(as.formula(f),data=dat)
>    vis.gam(b)
>    fitted(b)
>  })
>
> But as Sarah already commented, without a reproducible piece of example
> code we cannot present any working solutions.
>
> cheers,
> Paul
>
-- 
Sarah Goslee
http://www.functionaldiversity.org



More information about the R-help mailing list