Re: Anova() in car not works after loading piecewiseSEM package

Jinsong Zhao <[email protected]> Sun, 19 Jul 2026 10:57:37 +0800
Newsgroups gmane.comp.lang.r.general
Message-ID <[email protected]>
Thanks for the recommended solutions. I have tried each solution in a 
new R session, and neither works.

 > 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]>.
 > library(nlme)
 > library(car)
Loading required package: carData
 > fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1)
 > Anova(fm2)
Error in if (random) { : the condition has length > 1
 > car::Anova(fm2)
Error in if (random) { : the condition has length > 1
 > car:::Anova.lme(fm2)
Error in if (random) { : the condition has length > 1


On 7/19/2026 10:18 AM, Jeff Reichman wrote:
> 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.