我目前正在为学校开展一个R项目。我对这个项目有疑问。我必须打印一个双向表,我表中的每个单元格都应该包含卡方测试的结果。
例如:
例如,0.7是Orange和Apple之间卡方检验的结果。
我知道如何在两个变量之间进行卡方检验:
chisq.test(c(data_frame$Apple, data_frame$Orange))
然后我尝试打印双向表:
list <- c("Apple", "Orange", "Grappe")
for (element in list) {
for (element2 in list) {
chisq.test(c(data_frame$element, data_frame$element2))
}
}
但是它不起作用,我有一个无限循环。
有人可以帮我解决这个问题吗?我是R的新手 另外,对不起我的英文
答案 0 :(得分:1)
如果没有查看data_frame
,就无法知道以下代码是否符合您的要求,但现在就这样了。
首先,我已将向量的名称更改为mylist
,因为list
是R函数。
mylist <- c("Apple", "Orange", "Grappe")
pval <- lapply(mylist, function(x){
lapply(mylist, function(y){
if(x != y) {
chisq.test(data_frame[[x]], data_frame[[y]])$p.value
}
})
})
pval
这只会产生p值,如果你想要chisq.test
的完整输出你会使用
result <- lapply(mylist, function(x){
lapply(mylist, function(y){
if(x != y) {
chisq.test(data_frame[[x]], data_frame[[y]])
}
})
})
这会产生一个嵌套的列表列表,嵌套列表的每个元素都是类htest
的对象,由R中的假设测试返回。
答案 1 :(得分:0)
试试这个
list <- c("Apple", "Orange", "Grappe")
while (element in list) {
while (element2 in list) {
chisq.test(c(data_frame$element, data_frame$element2))
}
}