[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

mviljamaa mviljamaa at kapsi.fi
Sun Sep 25 18:04:09 CEST 2016


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