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 error Error in
if (random) { : the condition has length > 1 happens because the internal logic
is misidentifying the random argument within your lme model object.
Recommended Solutions
To resolve this without needing to restart your R session or change your
package load order, you can explicitly call the car version of the function
using the namespace operator (::).
1. Use the Namespace Operator: Instead of calling Anova(fm2), call it by
explicitly specifying the package:
car::Anova(fm2)
This bypasses any masking by piecewiseSEM and forces R to use the Anova
function provided by the car package.
2. Re-load the car package (if necessary)If you prefer not to use car:: every
time, you can re-attach car after piecewiseSEM to ensure its methods take
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 model
objects (including lme) to calculate path coefficients and goodness-of-fit
statistics for structural equation models. To do this, it extends or modifies
the behavior of several generic functions. In some versions of these packages,
the internal check for the random effects structure in an lme object (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*package 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
solution. Any suggestions or insights would be greatly appreciated.
Best,
Jinsong
> library(nlme)
> fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1) >
> library(car) Loading required package: carData > Anova(fm2) Analysis of
> Deviance 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 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 >
library(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://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.