Вложено, если еще - если выбрасывает «неожиданную ошибку» в R - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь выбрать столбец 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 голосов
/ 31 октября 2019

Некоторые из условий внутри 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
)
...