if else语句和if_else的不同行为

时间:2018-05-25 09:20:00

标签: r if-statement dplyr

我正在尝试创建一个函数,如果列的类型为data source=YOURSERVER;initial catalog=YOURDATABASE;Persist Security Info=False;integrated security=True;MultipleActiveResultSets=True" ,则将数据框的数据类型转换为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

请帮忙 谢谢

1 个答案:

答案 0 :(得分:7)

dplyr::if_else专门用于强制您在truefalse参数中使用相同的类型。

来自:?dplyr::if_else

  

与基础ifelse()相比,此函数更严格。它检查   真假都属于同一类型。

在您的情况下,x是字符,因此在if_else(is.character(x),as.factor(x),x)语句中,true参数将为factor(类型integer)和{ {1}}参数将为falsecharacter不喜欢这样,因此返回:

  

错误:if_else类型'字符'不是'整数'

此外,falsedplyr::if_else旨在与向量一起使用,因此在您的情况下,它们不是很好的选择。通过定期base::ifelse if来电,只会评估正确的条件,elseif_else会对这两种情况进行评估。