我在 R 的 all.equal 函数中遇到了一些奇怪的行为。基本上,我以不同的方式创建两个相同的 data.frame,然后调用 all.equal 函数(同时检查数据和属性)。
重现该行为的代码如下:
var.a <- data.frame(cbind(as.integer(c(1,5,9)), as.integer(c(1,5,9))))
colnames(var.a) <- c("C1", "C2")
rownames(var.a) <- c("1","5","9")
var.b <- data.frame(matrix(NA, nrow = 10, ncol = 2))
var.b[, 1] <- 1:10
var.b[, 2] <- 1:10
colnames(var.b) <- c("C1", "C2")
var.b <- var.b[seq(1, nrow(var.b), 4), ]
all.equal(var.a, var.b)
这是一个错误还是我只是错过了什么?我对 all.equall 函数做了一些调试,看来问题出在 data.frames 的行名上(一旦它们是字符,而其他时候是数字向量)。all.equall 函数的响应:
[1]“属性:<组件2:模式:字符,数字>”
[2]“属性:<组件2:目标是字符,当前是数字>”
然而,
typeof(rownames(var.a)) == typeof(rownames(var.b))
返回TRUE,这让我很困惑。
PS:对象的结构似乎相同:
> str(var.a)
'data.frame': 3 obs. of 2 variables:
$ C1: int 1 5 9
$ C2: int 1 5 9
> str(var.b)
'data.frame': 3 obs. of 2 variables:
$ C1: int 1 5 9
$ C2: int 1 5 9
如果有人能对此有所了解,我将不胜感激。