>>>>> Martin Maechler on Thu, 2 Jan 2025 20:42:58 +0100 writes:
>>>>> Duncan Murdoch on Thu, 2 Jan 2025 11:28:45 -0500 writes:
>> On 2025-01-02 11:20 a.m., Duncan Murdoch wrote:
>>> On 2025-01-02 9:04 a.m., Norbert Kuder wrote:
>>>> Hello all,
>>>>
>>>> I am running R version 4.4.2 (2024-10-31 ucrt) on Windows 10 x64, and
>>>> noticed something that might be a minor bug (or at least inconsistent
code)
>>>> in the stats/arima.R package.
>>>> I have found:
>>>> 1. A missing stop() call at line 69:
>>>> if (length(order) == 3) seasonal <- list(order = seasonal) else
>>>> ("\'seasonal\' is of the wrong length")
>>>> it should be rather:
>>>> if (length(order) == 3) seasonal <- list(order = seasonal) else
>>>> stop("\'seasonal\' is of the wrong length")
>>>
>>> I think you're right about this one.
well, actually, the mishap is larger:
Reading the help page for arima, 'seasonal' is documented as
seasonal: A specification of the seasonal part of the ARIMA model, plus
the period (which defaults to ‘frequency(x)’). This may be a
list with components ‘order’ and ‘period’, or just a numeric
vector of length 3 which specifies the seasonal ‘order’. In
the latter case the default period is used.
Note the
or just a numeric vector of length 3 ... the seasonal 'order'
part.
If you look at the larger context of the
else ("'seasonal...
part, it becomes clear that -- in order to fulfill the above
documented behavior, it's not length(order),
but length(seasonal) which should be 3 which leads to the
following change :
@@ -124,10 +124,11 @@
if(!is.numeric(seasonal$order) || length(seasonal$order) != 3L
|| any(seasonal$order < 0L))
stop("'seasonal$order' must be a non-negative numeric vector
of length 3")
- } else if(is.numeric(order)) {
- if(length(order) == 3L) seasonal <- list(order=seasonal)
- else ("'seasonal' is of the wrong length")
- } else stop("'seasonal' must be a list with component 'order'")
+ } else if(is.numeric(seasonal)) { # meant to be seasonal$order
+ if(length(seasonal) != 3L || any(seasonal < 0))
+ stop("if not a list, 'seasonal' must be a non-negative numeric
vector of length 3")
+ seasonal <- list(order=seasonal)
+ } else stop("'seasonal' must be a list with component 'order' or
length-3 vector")
... I still plan to commit this, but it may well be that this
change will wake up arima() use that was buggy and never detected
till now.
Martin
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel