如果在R中抛出“意外错误”,则嵌套否则

时间:2019-10-31 11:35:31

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

我正在尝试从数据集sn_r中的va中选择列va$VACHART==。如果满足此条件,那么我想在使用公式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
}

1 个答案:

答案 0 :(得分:0)

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
)