对于相同的字符串,R相同的返回False

时间:2018-06-06 17:33:40

标签: r

我有一个由相同字符串组成的数据框,但是当我比较它时identical()函数返回false?

示例:

df <- data.frame("x" = rep("a", times = 10),
                 "y" = rep("a", times = 10))

checkEquality <- function(x) {
  y = x[1]
  z = x[2]
  return(identical(y, z))
}

apply(df[1:2], 1, checkEquality)

当代码返回FALSE的向量时,此代码返回TRUE的向量。我不知道这里发生了什么。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

这是因为它们并不完全相同。您的函数逐行获取数据框,然后比较以前的列。由于您使用单括号运算符[],因此您可以维护列名和行名:

x = df[1,]

x[1]
  x
1 a

x[2]
  y
1 a

虽然值相同,但列名称不同,因此两个向量相同。

如果使用双括号表示法[[]],那么它将只提取一个元素,删除行名和列名,它应该有效:

checkEquality <- function(x) {
    y = x[[1]]
    z = x[[2]]
    return(identical(y, z))
}
apply(df, 1, checkEquality)
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

答案 1 :(得分:0)

我之前没有使用过相同的(),但你尝试过ifelse()?

ifelse(col1==col2, 'TRUE', 'FALSE')