Насколько я могу судить по вашему коду (который даже не запускается из-за отсутствия закрывающей скобки?) Вы пытаетесь сделать (псевдокод):
foreach row in data
if row$LocID is one of 3, 4, 7, 8, or 14
THEN set row$newConc to row$conc/2
ELSE set row$newConc to row$conc
Для этоговы используете ifelse
.
Также, если вы хотите проверить, равно ли значение 3, 4, 7, 8 или 14, не используйте ==
- это вернет вектор логических значений, а if
требует одиночного логического значения, следовательно, ваша ошибка.
Либо используйте data$locID %in% c(3,4,7,8,14)
для возврата одиночного ИСТИНА/ FALSE, или используйте any(data$locID == c(3,4,7,8,14))
, чтобы превратить вектор логических значений в один логический:
Вы сравниваете скаляр с вектором, и поэтому вы выводите вектор.Оператор if
принимает только один логический (не вектор логических значений).
Либо используйте data$locID %in% c(3,4,7,8,14)
, чтобы вернуть single TRUE / FALSE, либо используйте any(data$locID == c(3,4,7,8,14))
дляпревратить вектор логических значений в один логический:
data$newConc <- ifelse( data$locID %in% c(3,4,7,8,14),
data$conc/2,
data$conc )
В качестве альтернативы я мог бы использовать ifelse( any(data$locID == c(3,4,7,8,14)), ... )
.