首页 > 解决方案 > R:为什么即使没有循环,if 语句也会被计算两次?

问题描述

我知道已经有很多关于 if 语句的问题,但是由于它们几乎都包含循环,所以我还没有找到合适的答案。

我用 3 个测试中最重要的统计值(p 值、Cohen's d...)构建了一个数据框:

p1 = 0.9
p2 = 0.00021
p3 = 0.001
stat <- data.frame(ID=c("Group A","Group B","Group C"),pvalues = c(p1,p2,p3),cohensd=c(0.14,0.5,0.2))

现在,如果至少有两个 p 值小于 0.05,我想输出一条消息,说明哪个组的影响最大(基于 Cohen 的 d)——但当然前提是 p 值小于 0.05团体。

在我的情况下,所需的输出将是“B 组的效果最强”。

我尝试了以下方法:

if(((p1 < 0.05)+(p2 < 0.05) + (p3 < 0.05))>=2 ){paste("The effect is strongest for", stat$ID[which.max(stat$cohensd)&stat$pvalues<0.05])}

但我得到的是:“B组效果最强”“C组效果最强”

显然,if 语句被评估了两次,但我不知道为什么。有人能找到我的错误吗?非常感谢!

标签: rif-statement

解决方案


stat$ID[which.max(stat$cohensd)&stat$pvalues<0.05]返回"Group B" "Group C",因此您可以打印两个组。您可能会使用stat$ID[which.max(stat$cohensd &stat$pvalues<0.05)]which 只会给您"Group B",但请注意,which.max如果所有值都被评估为 ,它将给您第一组FALSE。更好的选择是使用which(...)[1]which will return NAif all the values are FALSE

if(((p1 < 0.05)+(p2 < 0.05) + (p3 < 0.05))>=2 ){paste("The effect is strongest for", stat$ID[which(stat$cohensd &stat$pvalues<0.05)[1]])}

#[1] "The effect is strongest for Group B"

推荐阅读