我想使用一个分组变量对data.frame中的某些数值变量运行KW测试。我更喜欢在循环中执行此操作,而不是键入所有测试,因为它们是许多变量(比下面的示例中更多)。
模拟数据:
library(dplyr)
set.seed(123)
Data <- tbl_df(
data.frame(
muttype = as.factor(rep(c("missense", "frameshift", "nonsense"), each = 80)),
ados.tsc = runif(240, 0, 10),
ados.sa = runif(240, 0, 10),
ados.rrb = runif(240, 0, 10))
) %>%
group_by(muttype)
ados.sim <- as.data.frame(Data)
下面的代码在循环外运行正常。
kruskal.test(formula (paste((colnames(ados.sim)[2]), "~ muttype")), data =
ados.sim)
但不在循环内:
for(i in names(ados.sim[,2:4])){
ados.mtp <- kruskal.test(formula (paste((colnames(ados.sim)[i]), "~ muttype")),
data = ados.sim)
}
我得到错误:
公式(formula,data = data):模型公式中的术语无效 *
有谁知道怎么解决这个问题吗?
2条答案
按热度按时间qxsslcnc1#
尝试:
这也将结果保存在列表中,避免在每次迭代中将结果覆盖为
ados.mtp
,我认为这不是您想要做的。请注意以下事项:
也就是说,
i
已经给出了列的名称。代码中的问题是,您试图将其用作整数来进行子集设置,这将结果变为NA
。仅供参考,所有这些也可以通过以下两种我经常喜欢的方式来完成,因为它使后续分析稍微容易一些:
首先,将所有测试对象存储在 Dataframe 中:
然后,您可以对dataframe进行子集设置以获得测试结果:
或者,直接在dataframe中获取所有结果,而不存储测试对象:
eblbsuwk2#
如果可以使用外部库: