2

我之前使用过一个函数来获取 R 中对象的完整属性(我之前使用它来找出为什么两个看起来相同的数据帧未能通过 checkEquals RUnit 检查)。

结构 ( str()) 和属性 ( attributes()) 看起来相同。任何人都可以指出正确的方向,即显示对象全部属性的函数是什么?

4

1 回答 1

1
  1. str(带有可选传递vec.lennhcar.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
    
  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, 
    
  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 
    
于 2012-06-19T11:20:26.883 回答