【发布时间】:2017-12-15 00:40:01
【问题描述】:
我从 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)} -
从
?ifelse我们可以得知,它返回的值是一个长度和属性(包括维度和“类”)与测试值和数据值相同的向量。是或否 -
一个矫枉过正的选择:从 perl 中借用
//并执行类似levels(x) // unique(x)... 在实践中:`%//%` = function(x,y) if (!is.null(x)) x else y; levels(x) %//% unique(x)stackoverflow.com/questions/23873379/… -
另一个稍微有点矫枉过正的选项,但
ifelse是:unlist(ifelse(class(vector) == "factor", list((levels(vector))), list(unique(vector))))。你更改ifelse以返回一个包含一个元素的列表,然后你unlist那
标签: r