首页 > 解决方案 > 对于相同的字符串,R 相同返回 False

问题描述

我有一个由相同字符串组成的数据框,但是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。我不知道这里发生了什么。任何帮助表示赞赏。

标签: r

解决方案


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

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

推荐阅读