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)
请帮忙谢谢
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评估两者.