Существует путаница в отношении ifelse
. Я надеюсь, что кто-то может помочь объяснить.
Рассмотрите код ниже:
x1 = c(1,4,3)
y1 = c(2,3,5)
# 1
> ifelse(x1 > y1, x1^2 + y1^2,y1)
[1] 2 25 5
# 2
> ifelse(x1 > y1, sum(x1),y1)
[1] 2 8 5
# from #1 I guess second element should be sum(x1) == sum(x1[2]) == sum(4)
Почему?
Обновление:
После прочтения книги -- Искусство программирования R , я решаю свою проблему.
ifelse(b,u,v)
, где b
- булев вектор, а u
и v
- векторы.Возвращаемое значение само по себе является вектором;элемент i
равен u[i]
, если b[i]
истинно, или v[i]
, если b[i]
ложно
Итак
ifelse(x1 > y1, sum(x1),y1) == ifelse(x1 > y1, c(sum(x1),sum(x1),sum(x1)),c(2,3,5)) # by recycling
# then b = c(T,F,T), u = c(8,8,8), v = c(2,3,5)
# therefore output would be (v[1],u[2],v[3]), i.e.
# [1] 2 8 5