Почему операторы R ifelse не могут возвратить векторы?

Ваши выражения эквивалентны операторам "b, квадратное число", и "b 10-е питание числа" соответственно. Преобразование "питания" операторов в TNT значительно более хитро.

105
задан Gregor 10 May 2018 в 20:43
поделиться

3 ответа

В документации для ifelse указано:

ifelse возвращает значение с таким же форма как тест , заполненная элементы выбираются из да или нет в зависимости от того, of test равно TRUE или FALSE .

Поскольку вы проходите тестовые значения длины 1, вы получаете результаты длины 1. Если вы пройдете больше тестовые векторы, вы получите более длинные результаты:

> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))
[1] 1 4

Итак ifelse предназначен для конкретной цели тестирования вектора логических значений и возврата вектора такой же длины, заполненного элементами, взятыми из (вектора) да и нет аргументы.

Из-за названия функции часто возникает путаница, когда вы используете это, когда вам действительно нужен обычный if () {} else {} вместо этого.

85
ответ дан 24 November 2019 в 04:00
поделиться

yeah, I think ifelse() is really designed for when you have a big long vector of tests and want to map each to one of two options. For example, I often do colors for plot() in this way:

plot(x,y, col = ifelse(x>2,  'red', 'blue'))

If you had a big long vector of tests but wanted pairs for outputs, you could use sapply() or plyr's llply() or something, perhaps.

9
ответ дан 24 November 2019 в 04:00
поделиться

Держу пари, вам нужен простой оператор if вместо ifelse - в R, если не просто структура потока управления, он может возвращать значение:

> if(TRUE) c(1,2) else c(3,4)
[1] 1 2
> if(FALSE) c(1,2) else c(3,4)
[1] 3 4
61
ответ дан 24 November 2019 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: