我正在尝试创建一个函数,如果列的类型为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
请帮忙 谢谢
答案 0 :(得分:7)
dplyr::if_else
专门用于强制您在true
和false
参数中使用相同的类型。
来自:?dplyr::if_else
:
与基础ifelse()相比,此函数更严格。它检查 真假都属于同一类型。
在您的情况下,x
是字符,因此在if_else(is.character(x),as.factor(x),x)
语句中,true
参数将为factor
(类型integer
)和{ {1}}参数将为false
。 character
不喜欢这样,因此返回:
错误:
if_else
类型'字符'不是'整数'
此外,false
和dplyr::if_else
旨在与向量一起使用,因此在您的情况下,它们不是很好的选择。通过定期base::ifelse
if
来电,只会评估正确的条件,else
和if_else
会对这两种情况进行评估。