Разное поведение операторов if else и if_else - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь создать функцию, которая преобразует тип данных фрейма данных в factor, если столбец имеет тип char, иначе я ничего не меняю.Но проблема здесь в том, что я могу сделать то же самое с оператором if else, но не использую оператор if_else. Вот код для того же примечания - я использую набор данных titanic

changetype = function(x)
  if(class(x) == "character") as.factor(x) else x
changetype2 = function(x)
  if_else(is.character(x),as.factor(x),x)
result1  = sapply(Train$Embarked, changetype)
result2  = sapply(Train$Embarked, changetype2)

result1 работает нормально, тогда как result2 выдает ошибку

Error: `false` has type 'character' not 'integer'

Пожалуйста, помогите Спасибо

1 Ответ

0 голосов
/ 25 мая 2018

dplyr::if_else специально написано, чтобы заставить вас иметь одинаковый тип в ваших аргументах true и false.

От: ?dplyr::if_else:

По сравнениюк основанию ifelse () эта функция более строгая.Он проверяет, что true и false имеют одинаковый тип.

В вашем случае x является символом, поэтому в выражении if_else(is.character(x),as.factor(x),x) параметр true будет factor (type integer), а параметр false будет character.if_else это не нравится и, таким образом, возвращает:

Ошибка: false имеет тип 'символ', а не 'целое число'

Также dplyr::if_else иbase::ifelse предназначены для использования с векторами, поэтому в вашем случае они не являются хорошим выбором.При обычном вызове if else оценивается только правильное условие, if_else и ifelse оценивают оба.

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