无法在chisq.test输出中显示y变量的值

时间:2016-10-26 18:21:39

标签: r

最初的任务

我想对data.frame的所有列执行卡方检验,然后仅显示最重要的结果(p.value <= 0.05)。第一列为x,其他所有列均为y。这是代码:

y <- 2

for(y in y:ncol(data)){
  chisq_result <- chisq.test(x = data[,1], y = data[,y]);
  if(chisq_result$p.value <= 0.05){
    print(chisq_result);
  }
}

问题

Pearson's Chi-squared test

data:  data[, 1] and data[, y]
X-squared = 11.166, df = 2, p-value = 0.003761

如您所见,第二行显示data[, y],它应为data[, 4](或其他列号)。换句话说,我无法在y输出中显示chisq.test变量的值。

为什么我要这个?因为我在data.frame中有几个列进行了几次卡方检验并且没有任何参考,有时很难知道哪个列与该输出或其他列相关。

临时解决方法

我尝试了与get()eval()parse()do.call()不同的内容,但似乎没有任何效果。目前,我刚刚添加cat("X = ", colnames(data)[x], " Y = ", colnames(data)[y], "\n");作为条件任务,以获取变量的名称:

y <- 2

for(y in y:ncol(data)){
  chisq_result <- chisq.test(x = data[,1], y = data[,y]);
  if(chisq_result$p.value <= 0.05){
    cat("X = ", colnames(data)[x], " Y = ", colnames(data)[y], "\n");
    print(chisq_result);
  }
}

...它提供了更多可用的东西(参见第1行),但不满意,因为我仍然得到变量名y而不是值4(第3行):

X =  colname1  Y =  colname4 

Pearson's Chi-squared test

data:  data[, 1] and data[, y]
X-squared = 11.166, df = 2, p-value = 0.003761

解决方案

感谢RomanLuštrik,我使用sprintf()直接编辑data.name内容。这是新代码:

y <- 2

for(y in y:ncol(data)){
  chisq_result <- chisq.test(x = data[,1], y = data[,y]);
  if(chisq_result$p.value <= 0.05){
    chisq_result$data.name <- sprintf("col %s and col %s", x, y);
    print(chisq_result);
  }
}

给出了:

Pearson's Chi-squared test

data:  col 5 and col 8
X-squared = 11.166, df = 2, p-value = 0.003761

1 个答案:

答案 0 :(得分:0)

我认为您的解决方法没有任何问题。这是另一个,通过替换chisq.test打印对象中的相关数据。

xy <- data.frame(var1 = sample(50:100, size = 20), 
                 var2 = sample(100, 150, size = 20))

x <- chisq.test(x = xy[, 1], y = xy[, 2])

x$data.name <- "something pretty from 1 and 2"
x

    Pearson's Chi-squared test

data:  something pretty from 1 and 2
X-squared = 340, df = 323, p-value = 0.2471