[R] curve() doesn't seem to use the whole range of x? And Error: longer object length is not a multiple of shorter object length

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Sun Sep 25 19:20:18 CEST 2016


Object clka not found.

Did you test run it in a fresh R environment? 
-- 
Sent from my phone. Please excuse my brevity.

On September 25, 2016 9:37:56 AM PDT, Matti Viljamaa <mviljamaa at kapsi.fi> wrote:
>Okay here’s a pretty short code to reproduce it:
>
>data <-
>read.table("http://users.jyu.fi/~slahola/files/glm1_datoja/yoruotsi.txt",
>header=TRUE)
>attach(data)
>
>fit2 <- lm(ruotsi.pist ~ mies + koulu + lka + koulu*clka)
>
>bs <- coef(fit2)
>
>varitB <- c(data[koulu == 'B',]$mies)
>varitB[varitB == 0] = 2
>plot(data[data$koulu == 'B',]$lka, data[koulu == 'B',]$ruotsi.pist,
>col=varitB, pch=16, xlab='', ylab='', main='Lukio B’)
>
>curve(bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*x+bs["kouluB:clka"]*clka,
>from=min(lka), to=max(lka), add=TRUE, col='red')
>
>
>> On 25 Sep 2016, at 19:24, Jeff Newmiller <jdnewmil at dcn.davis.ca.us>
>wrote:
>> 
>> Go directly to C. Do not pass go, do not collect $200.
>> 
>> You think curve does something, but you are missing what it actually
>does. Since you don't seem to be learning from reading ?curve or from
>our responses, you need to give us an example you can learn from. 
>> -- 
>> Sent from my phone. Please excuse my brevity.
>> 
>> On September 25, 2016 9:04:09 AM PDT, mviljamaa <mviljamaa at kapsi.fi>
>wrote:
>>> On 2016-09-25 18:52, Jeff Newmiller wrote:
>>>> You seem to be confused about what curve is doing vs. what you are 
>>>> doing.
>>> 
>>> But my x-range in curve()'s parameters from and to should be the
>entire
>>> 
>>> lka vector, since they are from=min(lka) and to=max(lka). Then why
>does
>>> 
>>> this not span the entire of lka? Because of duplicate entries or
>what?
>>> 
>>> It seems like I cannot use curve(), since my x-axis must be exactly
>lka
>>> 
>>> for the function to plot the y value for every lka value.
>>> 
>>>> A) Compute the points you want to plot and put them into 2 vectors.
>>>> Then figure out how to plot those vectors. Then (perhaps) consider
>>>> putting that all into one line of code again.
>>>> 
>>>> B) The predict function is the preferred way to compute points. It
>>> may
>>>> be educational for you to do the computations by hand at first, but
>>> in
>>>> the long run using predict will help you avoid problems getting the
>>>> equations right in multiple places in your script.
>>>> 
>>>> C) Learn what makes an example reproducible (e.g. [1] or [2]), and
>>> ask
>>>> your questions with reproducible code and data so we can give you
>>>> concrete responses.
>>>> 
>>>> [1] http://adv-r.had.co.nz/Reproducibility.html
>>>> [2]
>>>> 
>>>
>http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example
>>>> --
>>>> Sent from my phone. Please excuse my brevity.
>>>> 
>>>> On September 25, 2016 8:36:49 AM PDT, mviljamaa
><mviljamaa at kapsi.fi> 
>>>> wrote:
>>>>> On 2016-09-25 18:30, Duncan Murdoch wrote:
>>>>>> On 25/09/2016 9:10 AM, Matti Viljamaa wrote:
>>>>>>> Writing:
>>>>>>> 
>>>>>>> 
>>>>> 
>>>
>bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*lka+bs["kouluB:clka"]*clka
>>>>>>> 
>>>>>>> i.e. without that being inside curve produces a vector of length
>>>>> 375.
>>>>>>> 
>>>>>>> So now it seems that curve() is really skipping some
>>> lka-/x-values.
>>>>>> 
>>>>>> How could curve() know what the length of lka is?  You're telling
>>> it
>>>>>> to set x to a sequence of values of length 101 (the default) from
>>>>>> min(lka) to max(lka).  You never tell it to set x to lka.
>>>>>> 
>>>>>> curve() is designed to plot expressions or functions, not
>vectors.
>>>>> If
>>>>>> you actually want to plot line segments using your original data,
>>> use
>>>>>> lines().  (You'll likely need to sort your x values into
>increasing
>>>>>> order if you do that, or you'll get a pretty ugly plot.)
>>>>>> 
>>>>>> Duncan Murdoch
>>>>> 
>>>>> I know that about curve(), but since this function uses lka as a
>>>>> parameter, then how should I formulate it for curve so that I
>don't 
>>>>> get
>>>>> 
>>>>> the error about wrong lengths?
>>>>> 
>>>>>>> 
>>>>>>>> On 25 Sep 2016, at 16:01, Matti Viljamaa <mviljamaa at kapsi.fi>
>>>>> wrote:
>>>>>>>> 
>>>>>>>> I’m trying to plot regression lines using curve()
>>>>>>>> 
>>>>>>>> The way I do it is:
>>>>>>>> 
>>>>>>>> bs <- coef(fit2)
>>>>>>>> 
>>>>>>>> and then for example:
>>>>>>>> 
>>>>>>>> 
>>>>> 
>>>
>curve(bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*x+bs["kouluB:clka"]*clka,
>>>>> 
>>>>>>>> from=min(lka), to=max(lka), add=TRUE, col='red')
>>>>>>>> 
>>>>>>>> This above code runs into error:
>>>>>>>> 
>>>>>>>> Error in curve(bs["(Intercept)"] + bs["mies"] * 0 +
>bs["kouluB"]
>>> +
>>>>>>>> bs["lka"] *  :
>>>>>>>> 'expr' did not evaluate to an object of length 'n'
>>>>>>>> In addition: Warning message:
>>>>>>>> In bs["(Intercept)"] + bs["mies"] * 0 + bs["kouluB"] +
>bs["lka"]
>>> *
>>>>> :
>>>>>>>> longer object length is not a multiple of shorter object length
>>>>>>>> 
>>>>>>>> Which I’ve investigated might be related to the lengths of the
>>>>>>>> different objects being multiplied or summed.
>>>>>>>> Taking length(g$x) or length(g$y) of
>>>>>>>> 
>>>>>>>> g <-
>>> curve(bs["(Intercept)"]+bs["mies"]*0+bs["kouluB"]+bs["lka"]*x,
>>>>> 
>>>>>>>> from=min(lka), to=max(lka), add=TRUE, col='red')
>>>>>>>> 
>>>>>>>> returns 101.
>>>>>>>> 
>>>>>>>> However length(lka) is 375. But perhaps these being different
>is
>>>>> not
>>>>>>>> the problem?
>>>>>>>> 
>>>>>>>> I however do see that the whole range of lka is not plotted,
>for
>>>>> some
>>>>>>>> reason. So how can I be sure
>>>>>>>> that it passes through all x-values in lka? And i.e. that the
>>>>> lengths
>>>>>>>> of objects inside curve() are correct?
>>>>>>>> 
>>>>>>>> What can I do?
>>>>>>> 
>>>>>>> ______________________________________________
>>>>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
>see
>>>>>>> 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 -- To UNSUBSCRIBE and more, see
>>>>> 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.
>>



More information about the R-help mailing list