【问题标题】:Nested if else-if throwing "unexpected error" in R嵌套 if else-if 在 R 中抛出“意外错误”
【发布时间】:2019-10-31 11:35:31
【问题描述】:

我正在尝试从 va$VACHART== 的数据集 va 中选择列 sn_r。如果满足此条件,那么我想将值存储在新列中,同时使用公式5+50*log10(va$sn_r) 计算它。如果条件不满足,则在 sn_r 的不同范围值中搜索并存储它。

在 R 中,我尝试过使用 if、else if 语句,但在 "}" 中出现意外的 '}' 错误

if(va$VACHART=="1" & va$sn_r>"0.025"){
va$ETDRS_R = 85+50*log10(va$sn_r)
}else if(va$VACHART=="1" & "0.020"< vd$sn_r <="0.025"){
va$ETDRS_R = 5
}else if(va$VACHART=="1" & "0.015"< vd$sn_r <="0.020"){
va$ETDRS_R = 3
}else if(va$VACHART=="1" & "0.005"< vd$sn_r <="0.015"){
va$ETDRS_R = 1
}else {#if(va$VACHART=="1" & "0"< vd$sn_r <="0.005"){
va$ETDRS_R = 0
}

【问题讨论】:

  • 能否以可重现的格式分享数据

标签: r if-statement error-handling nested-loops


【解决方案1】:

if 中的一些条件不是有效的语法,例如

"0.020" < vd$sn_r <= "0.025"

这必须表示为:

vd$sn_r > "0.020" & vd$sn_r <= "0.025"

话虽如此,我什至不清楚这些列实际上不是数字。无论如何,我们可以尝试更正您的代码,但更好的方法是像 case_when 中的 dplyr 包:

va$ETDRS_R <- case_when(
    va$VACHART == 1 & va$sn_r > 0.025 ~ 85+50*log10(va$sn_r),
    va$VACHART == 1 & va$sn_r > 0.020 ~ 5,
    va$VACHART == 1 & va$sn_r > 0.015 ~ 3,
    va$VACHART == 1 & va$sn_r > 0.005 ~ 1,
    TRUE ~ 0
)

【讨论】:

  • 感谢@Tim,这似乎更容易并且效果很好:)
猜你喜欢
  • 2021-12-18
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2023-03-29
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多