R中等于字符但不等于其他类型的值

时间:2016-06-28 23:19:40

标签: r

查看函数factor的来源,我看到了这段代码:

  if (missing(levels)) {
    y <- unique(x, nmax = nmax)
    ind <- sort.list(y)
    y <- as.character(y)
    levels <- unique(y[ind])
}

乍一看,在我看来,在最后一行中使用unique函数是不必要的。所以我正在搜索2个值,我们称之为v1v2 v1 == v2返回FALSE,但as.character(v1) == as.character(v2)返回TRUE。但到目前为止找不到它们。

2 个答案:

答案 0 :(得分:1)

我认为factor()中的代码行是处理矩阵,因为unique()在参数为矩阵时删除重复的 ROWS

x <- matrix(rep(1:5, 2), nrow=5)

y <- unique(x)       # In this example, unique(x) remove nothing from x
ind <- sort.list(y)
y <- as.character(y)
levels1 <- unique(y[ind])
levels2 <- y[ind]

levels1 # [1] "1" "2" "3" "4" "5"
levels2 # [1] "1" "1" "2" "2" "3" "3" "4" "4" "5" "5"

答案 1 :(得分:1)

我不知道这是factor中代码行的动机,但这里有一个&#34;值等于字符但不等于其他类型&#34的示​​例34;

a <- 1-1e-16
b <- 1-1e-17
a==b; as.character(a)==as.character(b)
[1] FALSE
[1] TRUE