From wo||g@ng@v|echtb@uer @end|ng |rom m@@@tr|chtun|ver@|ty@n|  Fri Oct 11 12:27:42 2024
From: wo||g@ng@v|echtb@uer @end|ng |rom m@@@tr|chtun|ver@|ty@n| (Viechtbauer, Wolfgang (NP))
Date: Fri, 11 Oct 2024 10:27:42 +0000
Subject: [Rd] Error message when calling t.test() and aov() with a factor
 variables
Message-ID: <AS8PR08MB91934F160E97429FAFEB78588B792@AS8PR08MB9193.eurprd08.prod.outlook.com>

Hi all,

Just noticed that the error that arises when calling t.test() with factors could be a bit clearer:

> t.test(factor(c(3,1,2,4,3,5,4,5)), factor(c(2,1,2,3,4,5)))
Error in var(x) : Calling var(x) on a factor x is defunct.
  Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
In addition: Warning message:
In mean.default(x) :
  argument is not numeric or logical: returning NA

Obviously, using factors as input is nonsense, but this might happen on accident and then the error message could be a bit more on point. Similar for aov():

> aov(factor(c(3,1,2,4,3,5,4,5)) ~ factor(c(2,1,2,2,2,1,2,1)))
Call:
   aov(formula = factor(c(3, 1, 2, 4, 3, 5, 4, 5)) ~ factor(c(2,
    1, 2, 2, 2, 1, 2, 1)))
Error in levels(x)[x] :
  only 0's may be mixed with negative subscripts
In addition: Warning messages:
1: In model.response(mf, "numeric") :
  using type = "numeric" with a factor response will be ignored
2: In Ops.factor(y, z$residuals) : '-' not meaningful for factors

Not a big deal and trying to catch all of the silly things users may do is of course impossible, but for this one adding a check that the (response) variable is actually numeric could be useful.

Best,
Wolfgang

--
Wolfgang Viechtbauer, PhD, Statistician | Department of Psychiatry and
Neuropsychology | Maastricht University | PO Box 616 (VIJV1) | 6200 MD
Maastricht, The Netherlands | +31(43)3884170 | https://www.wvbauer.com



[Rd] Error message when calling t.test() and aov() with a factor variables
Viechtbauer, Wolfgang (NP