# [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 17:52:50 CEST 2016

```You seem to be confused about what curve is doing vs. what you are doing.

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.

[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
>
>
>>>
>>>> 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,
>
>>>>
>>>> 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 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,
>
>>>>
>>>> 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
>>> 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