Многие новые пользователи R сбиты с толку по поводу if
. Он оценивает только одно значение и затем выполняет либо следующее выражение, либо предложение else
. В R функция ifelse
, как правило, нужна бывшим пользователям SAS, Excel и SPSS, и она поддерживает вложение. Существует функция switch
, которая может быть полезна в некоторых случаях, хотя я не вижу, как ваш набор неисключительных логических условий сразу вписался бы в ее логику.
В вашем случае я бы подумал об использовании функции findInterval. Это выполнит объединенные операции логической и математической операции в вашем примере (и вернет вектор, если «A» был вектором):
A*( 1+ findInterval( A, c(20,50,100) ) ) # OR
A*( 1+ findInterval( A, c(-Inf, 20, 50, 100) ) ) # the equivalent using -Inf
И немного подумав об этом. Функцию findInterval
можно также использовать в качестве первого аргумента для switch
, если вы хотите, чтобы функция применялась к "A".
(Дальнейший комментарий: я предполагал, что ваше выражение «A1» будет скопировано вниз по столбцу или строке ячеек в электронной таблице Excel и будет в процессе увеличивать ссылки на строки или столбцы определенным автоматическим способом, который поддерживает Excel становится A2, A3 и т. д. Это другая точка зрения программирования, чем любой из более общих языков, с которыми вы сравниваете. Операции над векторами R аналогичны, но обычно не требуют "1", "2", "3". . записи и поэтому я пропустил их из кода.)