我在R的all.equal函數中遇到了一些奇怪的行爲。基本上,我創建兩個相同的data.frames,然後調用all.equal函數(檢查數據和屬性)。可能的錯誤在R 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)
這是一個bug或我只是失去了一些東西?我做了一些all.equall函數的調試,看起來問題在於data.frames的rownames(一旦它們是一個字符而另一次是數字向量)。
[1]:將all.equall功能的響應 「屬性:<組分2:模式:字符,數字>」
[2]「屬性:<組分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
我將不勝感激,如果有人可以在此提供一些線索。
+10 - 字符/整數變化對row.names的幫助非常明確。 – mnel
就是這樣。謝謝。這個幫助很好地解釋了它,雖然它不是最直觀的。 – Igor