[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 17:36:49 CEST 2016


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.
>>



More information about the R-help mailing list