Re: Anova() in car not works after loading piecewiseSEM package
"Jeff Reichman" <[email protected]> Sat, 18 Jul 2026 21:18:17 -0500
| Newsgroups | gmane.comp.lang.r.general |
|---|---|
| Organization | Lenovo T14 Gen 4 |
| Message-ID | <[email protected]> |
The issue occurs because piecewiseSEM defines its own S3 method for Anova()=
to handle structural equation models. When you load piecewiseSEM after the=
car package, it "masks" or interferes with car::Anova(), specifically when=
it tries to interpret the random effects structure of an lme object. The e=
rror Error in if (random) { : the condition has length > 1 happens because =
the internal logic is misidentifying the random argument within your lme mo=
del object.
Recommended Solutions
To resolve this without needing to restart your R session or change your pa=
ckage load order, you can explicitly call the car version of the function u=
sing the namespace operator (::).
1. Use the Namespace Operator: Instead of calling Anova(fm2), call it by ex=
plicitly specifying the package:
car::Anova(fm2)
This bypasses any masking by piecewiseSEM and forces R to use the Anova fun=
ction provided by the car package.
2. Re-load the car package (if necessary)If you prefer not to use car:: eve=
ry time, you can re-attach car after piecewiseSEM to ensure its methods tak=
e precedence in the search path:
library(piecewiseSEM)
library(car) # This re-masks the function back to the car version
Why this happens piecewiseSEM is designed to work with a wide variety of mo=
del objects (including lme) to calculate path coefficients and goodness-of-=
fit statistics for structural equation models. To do this, it extends or mo=
difies the behavior of several generic functions. In some versions of these=
packages, the internal check for the random effects structure in an lme ob=
ject (which is used to distinguish between fixed and random components) can=
conflict between the two packages, leading to the "length > 1" error when =
the function receives an unexpected input format. =
Using car::Anova() is the most robust and "future-proof" way to ensure you =
are getting the standard Type II/III tests you expect from the car package.
-----Original Message-----
From: R-help <[email protected]> On Behalf Of Jinsong Zhao
Sent: Saturday, July 18, 2026 8:06 PM
To: [email protected]; [email protected]; [email protected]
Subject: [R] Anova() in car not works after loading piecewiseSEM package
Hi there,
In the code below, you may notice that the Anova() function from the *car*p=
ackage does not behave as expected after loading the piecewiseSEMpackage. I=
haven't been able to identify the cause of this issue or find a working so=
lution. Any suggestions or insights would be greatly appreciated.
Best,
Jinsong
> library(nlme)
> fm2 <- lme(distance ~ age + Sex, data =3D Orthodont, random =3D ~ 1) > =
library(car) Loading required package: carData > Anova(fm2) Analysis of De=
viance Table (Type II tests)
Response: distance
Chisq Df Pr(>Chisq)
age 114.8383 1 < 2.2e-16 ***
Sex 9.2921 1 0.002301 **
---
Signif. codes: 0 =E2=80=98***=E2=80=99 0.001 =E2=80=98**=E2=80=99 0.01 =E2=
=80=98*=E2=80=99 0.05 =E2=80=98.=E2=80=99 0.1 =E2=80=98 =E2=80=99 1 > libr=
ary(piecewiseSEM) Registered S3 method overwritten by 'lme4':
method from
na.action.merMod car
This is piecewiseSEM version 2.3.0.2.
Questions or bugs can be addressed to <[email protected]>.
> Anova(fm2)
Error in if (random) { : the condition has length > 1
[[alternative HTML version deleted]]
______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see https://s=
tat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.ht=
ml
and provide commented, minimal, self-contained, reproducible code.