运行t.test(paired = T) 时会返回错误:条件的长度大于1
在运行配对的 stats::t-test() 时,我遇到了一个错误。我以为是我的数据集的问题,但即使运行这个简单的测试也会出现错误:
T <- 1:10
stats::t.test(c(1, 2, 3), c(4, 5, 8), paired = T)
Error in
if (paired) xok <- yok <- complete.cases(x, y) else {:
the condition has length > 1
这是不是环境中的某些因素导致的?还是我的语法不正确?
解决方案
问题在于原帖作者在调用 t.test() 时使用了 paired = T。
在R 中,T 是一个变量,通常的取值是 TRUE,但你可以把它设为任意其他值。
如果你有一个名为 T 的数据变量,它很可能是一个值的向量,你会看到类似于 @Zoe那样的错误。
问题的原始版本没有显示这一点,这也解释了它为何是一个好问题。
稍后的编辑让人一目了然,但在大多数情况下,你不会意识到在把它用于表示温度、周期、胸腺嘧啶含量,或其他不是 TRUE 的量时,你重新定义了 T。
为避免这种可能性,当你需要逻辑值时,始终使用 TRUE。它不是一个变量,R会把它当作常量来看待,且它永远不会改变。
你可能会想,为什么R 会内置这个陷阱。我相信答案可以追溯到四五十年前的S 语言。在那个语言中,T 是常量,TRUE 是取值为 T 的变量。长期以来,R力求在可能的情况下与S 保持兼容,因此需要两者,但作者将 TRUE 定义为常量,这一定义更为合理。如今,许多旧的R 代码都使用 T,要改变这点真的很困难,一些人(参见 Is there anything wrong with using T & F instead of TRUE & FALSE?)甚至认为S 的选择比R 的更好。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。