if else语句和if_else的不同行为

Atu*_*sal 3 if-statement r dplyr

我试图创建一个函数,将数据框的数据类型转换为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)
Run Code Online (Sandbox Code Playgroud)

result1工作正常,但result2给我一个错误

Error: `false` has type 'character' not 'integer'
Run Code Online (Sandbox Code Playgroud)

请帮忙谢谢

Moo*_*per 7

dplyr::if_else是专门编写的,强制你在你的truefalse参数中使用相同的类型.

来自?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_elseifelse评估两者.