Путаница в отношении ifelse - PullRequest
0 голосов
/ 26 февраля 2019

Существует путаница в отношении 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

1 Ответ

0 голосов
/ 26 февраля 2019

sum(x1)=8 очевидно, поскольку 1 + 4 + 3 = 8.Теперь вы можете задаться вопросом, почему ifelse, кажется, оценивает выражения по-разному: это не так, просто ^2 нельзя применить к вектору (что такое вектор в квадрате?), Поэтому он применяет поэлементно.однако вы можете применить sum() к вектору, что происходит во второй оценке.попробуйте ifelse(x1 > y1, x1,y1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...