[R] Anova() in car not works after loading piecewiseSEM package
Jeff Reichman
re|chm@nj @end|ng |rom @bcg|ob@|@net
Sun Jul 19 04:18:17 CEST 2026
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 <r-help-bounces using r-project.org> On Behalf Of Jinsong Zhao
Sent: Saturday, July 18, 2026 8:06 PM
To: r-help using r-project.org; jslefche using gmail.com; brad.price using mail.wvu.edu
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 <jslefche using gmail.com>.
> Anova(fm2)
Error in if (random) { : the condition has length > 1
[[alternative HTML version deleted]]
______________________________________________
R-help using r-project.org 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.
More information about the R-help
mailing list