r - 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 语句被评估了两次,但我不知道为什么。有人能找到我的错误吗?非常感谢!
解决方案
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 NA
if 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"
推荐阅读
- python - 策略梯度:为什么洗牌数据会导致性能下降?
- c# - 从视图到控制器的 ajax 对象不包含数据
- cygwin - 安装过程中名为“setup.zst.sig”的文件是什么?
- go - 如何在 Go 中跳过文件的第一行?
- azure - 在 Azure Kubernetes 服务 (AKS) 上生成已部署 Web 应用程序的访问日志
- java - 试图比较两个整数
- javascript - 为什么我不能向 div 添加事件侦听器?
- javascript - axios覆盖,从数据响应中获取状态码而不是状态
- angular - 基于交叉字段的角度日期验证
- amazon-web-services - 从 http://169.254.170.2/$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 获得 404