【发布时间】:2012-09-09 07:48:46
【问题描述】:
我在 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]“属性:"
然而,
typeof(rownames(var.a)) == typeof(rownames(var.b))
返回 TRUE,这让我很困惑。
P.S.:对象的结构似乎相同:
> 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
如果有人能对此有所了解,我将不胜感激。
【问题讨论】:
标签: r