Ваши выражения эквивалентны операторам "b, квадратное число", и "b 10-е питание числа" соответственно. Преобразование "питания" операторов в TNT значительно более хитро.
В документации для ifelse
указано:
ifelse
возвращает значение с таким же форма кактест
, заполненная элементы выбираются изда
илинет
в зависимости от того, oftest
равноTRUE
илиFALSE
.
Поскольку вы проходите тестовые значения длины 1, вы получаете результаты длины 1. Если вы пройдете больше тестовые векторы, вы получите более длинные результаты:
> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))
[1] 1 4
Итак ifelse
предназначен для конкретной цели тестирования вектора логических значений и возврата вектора такой же длины, заполненного элементами, взятыми из (вектора) да
и нет
аргументы.
Из-за названия функции часто возникает путаница, когда вы используете это, когда вам действительно нужен обычный if () {} else {}
вместо этого.
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.
Держу пари, вам нужен простой оператор 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