我无休止地搜索我的问题的解决方案无济于事。我正在对组内相关进行简单的计算,在这种情况下,这是对遗传性的估计。我希望能够重复超过12,000个个体基因的计算。这是我用来使事情发挥作用的小数据框架:
Strain_ID ENS001 ENS056 ENS058
5 3.06928082 3.038645597 2.985282543
5 2.868997097 2.666932055 2.793392732
5 3.235929871 2.90516985 2.630776507
7 3.002625449 2.868878032 2.363580624
7 3.150054756 2.881093606 2.474916595
7 3.138522184 2.693864389 2.490961619
其中Strain_ID是一个因子,ENS *是个体基因的标识符。 df被称为" h2_saline"。当我运行以下内容时,我得到了适当的答案:
exp.lm <- lm(ENS001 ~ Strain_ID, data = h2_saline)
library(car)
Anova(exp.lm)
Var.within <- Anova(exp.lm)["Residuals", "Sum Sq"]
Var.between <- Anova(exp.lm)["Strain_ID", "Sum Sq"]
h2 <- (Var.between - Var.within) / (Var.between + (2 * Var.within))
这是:
> Var.within
[1] 0.08095382
> Var.between
[1] 0.002281289
> h2
[1] -0.4791586
(注意:如果您有兴趣,请参阅http://jeromyanglim.blogspot.com/2013/12/using-r-to-replicate-common-spss.html了解使用汽车套餐的理由。)
但是,当我使用一个变量(&#34; x&#34;)来获取每个列标题的值以便我可以遍历df中的每一列时,我收到一条错误消息。例如:
assign("x", "ENS056")
exp.lm <- lm(x ~ Strain_ID, data = h2_saline)
library(car)
Anova(exp.lm)
Var.within <- Anova(exp.lm)["Residuals", "Sum Sq"]
Var.between <- Anova(exp.lm)["Strain_ID", "Sum Sq"]
h2 <- (Var.between - Var.within) / (Var.between + (2 * Var.within))
我得到了这个输出:
> assign("x", "ENS056")
>
> exp.lm <- lm(x ~ Strain_ID, data = h2_saline)
Error in model.frame.default(formula = x ~ Strain_ID, data=h2_saline, :
variable lengths differ (found for 'Strain_ID')
> library(car)
> Anova(exp.lm)
Anova Table (Type II tests)
Response: ENS001
Sum Sq Df F value Pr(>F)
Strain_ID 0.002281 1 0.1127 0.7539
Residuals 0.080954 4
> Var.within <- Anova(exp.lm)["Residuals", "Sum Sq"]
> Var.between <- Anova(exp.lm)["Strain_ID", "Sum Sq"]
> h2 <- (Var.between - Var.within) / (Var.between + (2 * Var.within))
>
正如您所看到的,它输出了我明确输入的第一个变量的结果,而不是我想要的df中的下一列。我已经尝试过分配&#34; ENS056&#34;以各种方式,仍然得到相同的结果。
非常感谢任何帮助。