gpt4 book ai didi

r - R all.equal 中可能存在的错误

转载 作者:行者123 更新时间:2023-12-03 23:34:13 25 4
gpt4 key购买 nike

我在 R 的 all.equal 函数中遇到了一些奇怪的行为。基本上,我以不同的方式创建两个相同的 data.frames,然后调用 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] "Attributes: < Component 2: Modes: character, numeric >"
[2] "Attributes: < Component 2: target is character, current is numeric >"



然而,

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

如果有人能对此有所了解,我将不胜感激。

最佳答案

(我不太清楚您认为您发现了什么错误。数据框的创建方式不同。) var.a 和 var.b 的结构有两个不同之处:列:'var.a' 中的 numeric 和 'var.b' 中的 integer;以及行名的模式:'var.a' 的 integer 和 'var.b' 中的 character:

> dput(var.b)
structure(list(C1 = c(1L, 5L, 9L), C2 = c(1L, 5L, 9L)), .Names = c("C1",
"C2"), row.names = c(1L, 5L, 9L), class = "data.frame")
> dput(var.a)
structure(list(C1 = c(1, 5, 9), C2 = c(1, 5, 9)), .Names = c("C1",
"C2"), row.names = c("1", "5", "9"), class = "data.frame")

> mode(attr(var.b, "row.names"))
[1] "numeric"
> storage.mode(attr(var.b, "row.names"))
[1] "integer"
> mode(attr(var.a, "row.names"))
[1] "character"

补充说明:如果你想检查数字相等,你应该使用'check.attributes'开关:
> all.equal(var.a, var.b, check.attributes=FALSE)
[1] TRUE

如果您查看 var.bdput ,您可以看到行名是数字:
> dput(var.b)
structure(list(C1 = c(1L, 5L, 9L), C2 = c(1L, 5L, 9L)), .Names = c("C1",
"C2"), row.names = c(1L, 5L, 9L), class = "data.frame")

关于r - R all.equal 中可能存在的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com