我之前使用过一个函数来获取 R 中对象的完整属性(我之前使用它来找出为什么两个看起来相同的数据帧未能通过 checkEquals RUnit 检查)。
结构 ( str()
) 和属性 ( attributes()
) 看起来相同。任何人都可以指出正确的方向,即显示对象全部属性的函数是什么?
我之前使用过一个函数来获取 R 中对象的完整属性(我之前使用它来找出为什么两个看起来相同的数据帧未能通过 checkEquals RUnit 检查)。
结构 ( str()
) 和属性 ( attributes()
) 看起来相同。任何人都可以指出正确的方向,即显示对象全部属性的函数是什么?
str
(带有可选传递vec.len
的nhcar.max
等参数)应该没问题。例如:
> str(mtcars, vec.len=Inf)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26 30.4 15.8 19.7 15 21.4
$ cyl : num 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
$ disp: num 160 160 108 258 360 225 360 146.7 140.8 167.6 167.6 275.8 275.8 275.8 472 460 440 78.7 75.7 71.1 120.1 318 304 350 400 79 120.3 95.1 351 145 301 121
$ hp : num 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 3.92 3.07 3.07 3.07 2.93 3 3.23 4.08 4.93 4.22 3.7 2.76 3.15 3.73 3.08 4.08 4.43 3.77 4.22 3.62 3.54 4.11
$ wt : num 2.62 2.88 2.32 3.21 3.44 3.46 3.57 3.19 3.15 3.44 3.44 4.07 3.73 3.78 5.25 5.42 5.34 2.2 1.61 1.83 2.46 3.52 3.44 3.84 3.85 1.94 2.14 1.51 3.17 2.77 3.57 2.78
$ qsec: num 16.5 17 18.6 19.4 17 20.2 15.8 20 22.9 18.3 18.9 17.4 17.6 18 18 17.8 17.4 19.5 18.5 19.9 20 16.9 17.3 15.4 17.1 18.9 16.7 16.9 14.5 15.5 14.6 18.6
$ vs : num 0 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 0 0 0 1
$ am : num 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1
$ gear: num 4 4 4 3 3 3 3 4 4 4 4 3 3 3 3 3 3 4 4 4 3 3 3 3 3 4 5 5 5 5 5 4
$ carb: num 4 4 1 1 2 1 4 2 2 4 4 3 3 3 4 4 4 1 2 1 1 2 2 4 2 1 2 2 4 6 8 2
我想逐行比较两个 R 对象,您可以尝试区分dput
两个对象的 ed 版本。
> dput(mtcars, file = 'mtcars')
> mtcars2 <- mtcars
> mtcars2$am <- 0
> dput(mtcars2, file = 'mtcars2')
> system('diff mtcars mtcars2')
23,25c23,25
< 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1), am = c(1,
< 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
< 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1), gear = c(4, 4, 4, 3,
---
> 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1), am = c(0,
> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gear = c(4, 4, 4, 3,
另一种方法可能是检查对象或其部分的哈希值,简短示例:
> library(digest)
> apply(mtcars, 2, digest)
mpg cyl
"6b33fae3fd79bb2081e21798c7001c1f" "fb8453e241dd708f9b17c412e94ab884"
disp hp
"feae4e282905d11380533c3cfa3fa997" "2afa2fea47856dc4fa23eb543f1d08a4"
drat wt
"345237ccc9e9b4f523ccdfde31e2f7c5" "558e5730ef0af2f50f23fe86363855ed"
qsec vs
"e777220d1d85545fd98767bb39f10967" "16ff5701471198a294b5c45a90dad3ca"
am gear
"abf0f4ab68322a6dd0fc078570892202" "7f9bb11d36a531de7ab0d6e71fd532c9"
carb
"793a7b0812e7597d508be29fc432ff49"
在这里,您将获得每列的哈希值,mtcars
其中可以与类似的数据框进行比较,并查看哪一列不同,例如:
> apply(mtcars, 2, digest) == apply(mtcars2, 2, digest)
mpg cyl disp hp drat wt qsec vs am gear carb
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE