R t、 首先通过子集测试分组因子的所有组合

R t、 首先通过子集测试分组因子的所有组合,r,R,我正在尝试对我的分组因子的所有组合进行t.检验,首先,根据另一列的选择标准,仅选择和子集数据 我的数据结构: str(mydata) 我在组列中有三个组:G1、G2和G3 我在类别栏中有四个类别:Cat1、Cat2、Cat3和Cat4 我有十二个子组:SG1,SG2,直到SG12 目前,我正在创建一个子组名称的所有组合列表,首先根据其组id对数据进行子集,因此在本例G1和G3中: combinations <- combn(unique(mydata[mydata$Group %in% c

我正在尝试对我的分组因子的所有组合进行t.检验,首先,根据另一列的选择标准,仅选择和子集数据

我的数据结构: str(mydata)

我在
列中有三个组:G1G2G3
我在
类别
栏中有四个类别:Cat1Cat2Cat3Cat4
我有十二个子组:SG1SG2,直到SG12

目前,我正在创建一个子组名称的所有组合列表,首先根据其组id对数据进行子集,因此在本例G1和G3中:

combinations <- combn(unique(mydata[mydata$Group %in% c("G1", "G3"),]$Subgroup),2, simplify = FALSE)
有没有更有效的方法?否则,如何更正此错误?

更新
实际上,问题在于如何调用t.test公式中
得分
列中的值?

以解决注释中的讨论:如果问题在某个子组中,则以下内容可能有助于确定是哪一个子组:

首先,让我们重新创建错误:

smalln <- data.frame(a=1, b=2)
t.test(smalln$a, smalln$b)
> Error in t.test.default(smalln$a, smalln$b) : not enough 'x' observations

如果在调用
sapply
时使用
failproof.t
sapply
将执行所有测试,直到结束。通常,当生成错误时,代码将停止。使用此方法,它仍将继续工作,并将吐出预定义的默认值,而不是错误消息。使用此方法,您将能够查看
结果
列表,查看发生错误的组组合

您的代码应该如下所示:

results <- lapply(seq_along(combinations), function (n) {
  mydatatemp <- mydata[with(mydata, Subgroup %in% unlist(combinations2[n]) & Group %in% c("G1", "G3")),]
  result <- t.test(mydatatemp[
                   mydatatemp$Subgroup == sapply(combinations[n], "[",1),4],
                   mydatatemp[mydatatemp$Subgroup == sapply(combinations[n], "[", 2),4],
                   alternative="two.sided", var.equal=TRUE)
             return(result)})
results

results@coffeinjunky不,两个组的大小相同,完全相同。@coffeinjunky是的,我认为这不是问题所在。问题来自于公式,其中有一些错误,我找不到它。@coffeinjunky我用另一个软件试过,t检验也适用于同样的数据。但我想在家里做R@coffeinjunky我不明白你的意思,你能在回答中发表你的评论并提供一个示例代码吗?谢谢
Error in t.test.default(mydatatemp[, 1], mydatatemp[, 2], alternative = "two.sided",  : 
  not enough 'x' observations In addition: Warning message:
In mean.default(x) : argument is not numeric or logical: returning NA
smalln <- data.frame(a=1, b=2)
t.test(smalln$a, smalln$b)
> Error in t.test.default(smalln$a, smalln$b) : not enough 'x' observations
failproof.t <- failwith(default="I need coffee", t.test, quiet = T)
failproof.t(smalln$a, smalln$b)
[1] "I need coffee"
results <- lapply(seq_along(combinations), function (n) {
  mydatatemp <- mydata[with(mydata, Subgroup %in% unlist(combinations2[n]) & Group %in% c("G1", "G3")),]
  result <- t.test(mydatatemp[
                   mydatatemp$Subgroup == sapply(combinations[n], "[",1),4],
                   mydatatemp[mydatatemp$Subgroup == sapply(combinations[n], "[", 2),4],
                   alternative="two.sided", var.equal=TRUE)
             return(result)})
results