我从ifelse
函数中得到了意外的结果:
vector <- factor(c('x', 'x', 'y', 'z'), levels = c('x', 'y', 'z'))
ifelse(class(vector) == "factor", yes = levels(vector), no =
unique(vector)) # Returns character "x" and not the expected c("x", "y",
"z")
# Manual debug
class(vector) == "factor" # TRUE
levels(vector) # [1] "x" "y" "z"
有什么想法吗?
if
,即if(is.factor(vector)){levels(vector)}else{unique(vector)}
。 - Sotos?ifelse
我们可以了解到它返回的值是 一个与 test 和数据值具有相同长度和属性(包括维度和“类”)的向量,其值来自于 yes 或 no 的值。 - loki//
并执行类似于levels(x) // unique(x)
的操作... 实际上:\
%//%`= function(x, y)if(!is.null(x))x else y; levels(x)%//% unique(x)` https://dev59.com/32Ag5IYBdhLWcg3wM4hb - Frankifelse
是:unlist(ifelse(class(vector) == "factor", list((levels(vector))), list(unique(vector))))
。您可以更改ifelse
以返回一个具有一个元素的列表,然后对其进行unlist
操作。 - AntoniosK